java第三天學習內容回顧——java白皮書第四章

來源:互聯網
上載者:User

標籤:java 自學第三天

  1. java物件導向程式設計中使用到名詞理解:對象標識==一個執行個體的變數名、對象行為==一個類的方法、對象狀態==類中的資料域(嚴格講是可以發生變化的資料域);

  2. 類之間的關係:use_a,has_a,is_a三種

  3. java中的Math類有些特殊,它只封裝了功能而並不涉及資料域,所以不需要也不必隱藏資料

  4. java中的物件變數名更像是個指標(像),聲明一個對象執行個體後必須用new構造對象然後用=將兩者連結起來,也可以用=將兩個不同的物件變數串連起來,但此時需要注意,就像指標賦值一樣,兩個變數自此將共用同一個對象執行個體,物件變數並沒有包含一個對象執行個體,而是引用了一個對象執行個體,可以顯式的將物件變數設定為NULL,用於表示此物件變數並沒有引用任何對象執行個體,需要注意的是局部(對象)變數不會自動初始化,需要通過new或者null(必須小寫)對其賦值

  5. java中的物件變數全都放在堆中,當一個對象包含另一個物件變數時,就是這個對象包含指向另一個堆對象的指標。

  6. java中深拷貝對象必須利用clone方法

  7. java中Date類用於表示時間點GregorianGalendar類用於表示日曆,Date類提供了before、after方法用於比較時間點,同時也提供了getDay等方法,但是作者不提倡使用

  8. 更改器方法:修改類對象資料域的方法

  9. 訪問器方法:僅讀取類對象資料域的方法、與前者在文法上並沒有區別

  10. 在同一個源檔案中,僅允許出現一個public類用於裝載main方法,當編譯時間會將源檔案中所有的類建立對應的.class檔案,然後將有main方法的類名給位元組碼解譯器以啟動,但main方法可以包含於其他的類中,這樣方便單元測試,可以通過IDE選定目標類,然後單元測試目標了,此時目標類中的main將會發揮啟動作用。

  11. 對於變種for迴圈,發現整型數組在迴圈塊中的修改並不會儲存下來,但如果是對象的話將會保留修改痕迹

  12. 注意構造器是沒有傳回值的

  13. 這裡有一個因果關係:因為java中所有對象都放在堆中,所以建立時用new,與c++有區別

  14. java中不能再構造器中聲明與資料域同名的變數,雖然不會報錯。

  15. java中所有的方法必須在類內部定義(外殼類),但這並不代表所有的方法都是內聯的。

  16. 對於訪問器方法的關註:訪問器方法不應該 直接 返回 狀態域(資料域) 的對象,因為接收變數會與此對象共用記憶體,從而可以通過接收變數間接修改此對象(雖然private) 應該做的是 返回此對象的拷貝,此處利用到.clone方法;

  17. 對於類的存取權限問題:一個類的方法可以訪問 所有 此類的對象執行個體中的資料域。而不是特定的對象執行個體中的資料域。 與C++不同

  18. static 類中若存在此類型的資料,那麼此類的所有對象執行個體都將會共用此資料,引用時是通過類名.引用,用於強調此資料是直屬類域並非屬於特殊的對象執行個體,靜態常量 類型可以使類中的公開變數很安全。

  19. 雖然理論上不能修改靜態常量,但是如果利用setOut方法 可以突破這一約定,原理是此方法是本地方法,它將繞過java實現

  20. 對於靜態方法:不需要對象執行個體,直接通過類名.調用,這裡有一個因果:所以不能訪問對象執行個體中的資料域,這裡有一個特例:除非對象執行個體中的資料域中存在待用資料,這樣靜態方法還是可以訪問此資料的。同類中的靜態變數類似,調用靜態方法建議使用類名直接調用,從而達到強調其不依賴對象執行個體,是靜態方法的目的。

  21. 對20進行總結:使用靜態方法的要求:1.不訪問執行個體的資料域。2.讓步,僅訪問資料域中的靜態域

  22. 這裡有一個方法 :Factory 方法。

  23. java中對於參數的傳遞只有一種形式:按值傳遞(先進行拷貝然後將拷貝得到的值進行傳遞)。於是這裡有一個因果:所以方法的參數如果是基本類型,那麼不會對其進行修改,但這裡有個看似特例但實際上是情理之中的情況:如果方法的參數是一個執行個體對象,是可以實現對其資料域的修改的,原因如下:對象執行個體本身就是一個相當於引用存在的指標(相當於),所以就算對其進行拷貝,得到的也是一個引用,然後兩個變數同時共用一個記憶體區,於是方法中對此記憶體區的修改是有效

  24. 注意,java中雖然對域(對象執行個體中的資料域,或者再高一層:存放在堆中的變數)可以進行預設的初始化例如數值預設初始化為0,boolean預設初始化為false,對象預設初始化為null,但局部變數並不會進行預設初始化,而且作者不提倡使用預設初始化,因為影響程式可讀性。此時發現,白皮書中所提到到的域應該有一個共同特性就是在存放在堆上,例如一個數組,也會被預設初始化,因為數組其實是相當於一個指標=new,因此應該儲存在堆中,然後它被預設初始化了。是否所有存放在堆中的資料都將被預設初始化?

  25. java中類中資料域的變數都可以被直接初始化,此處不同於C++,當然也能通過建構函式初始化。而且,java直接初始化時也可是利用到方法。詳述與白皮書P128頁。還涉及到初始化塊/靜態初始化塊,以及構造器的多重調用。。。。。。。。。。。。。此處較亂,真正用到時再琢磨。白皮書P131,有關內容詳述。

本文出自 “developing_Rookie” 部落格,請務必保留此出處http://8942041.blog.51cto.com/8932041/1627799

java第三天學習內容回顧——java白皮書第四章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.