java核心卷Ⅰ第十版筆記4
第四章
- 不要編寫返回引用可變對象的訪問器方法。由於會破壞封裝性。若是須要返回一個可變對象的引用, 應該首先對它進行克隆(clone )。對象 clone 是指存放在另外一個位置上的對象副本。
- final 修飾符大都應用於基本類型域,或不可變類的域(若是類中的每一個方法都不會改變其對象,這種類就是不可變的類。例如,String類就是一個不可變的類)。對於可變的類,使用 final修飾符可能會對讀者形成混亂。例如:
private final StringBuiIder evaluations;
在構造器中會初始化爲evaluations = new StringBuilder();
final 關鍵字只是表示存儲在 evaluations 變量中的對象引用不會再指示其餘StringBuilder對象。不過這個對象能夠更改:`public void giveGoldStarO{evaluations.append(LocalDate.now() + ": Gold star!n"); }
- System 類有一個 setOut 方法, 它能夠將 System.out 設置爲不一樣的流。爲何這個方法能夠修改 final 變量的值。緣由在於,setOut 方法是一個native方法,是用C/C++語言實現的,而且被編譯成了DLL,由java去調用 而不是用 Java 語言實現的。實際上java就是在不一樣的平臺上調用不一樣的native方法實現對操做系統的訪問的。native的意思就是通知操做系統, 這個函數你必須給我實現,由於我要使用。 因此native關鍵字的函數都是操做系統實現的, java只能調用。這是一種特殊的方法, 在本身編寫程序時, 不該該這樣處理。
- 在下面兩種狀況下使用靜態方法:一:方法不須要訪問對象狀態,其所需參數都是經過顯式參數提供(Math.pow) 二:一個方法只須要訪問類的靜態域(例如:Employee.getNextldh
- Java 程序設計語言對對象採用的不是引用調用,實際上,對象引用是按值傳遞的。總結一下Java中方法參數的使用狀況:一個方法不能修改一個基本數據類型的參數(即數值型或布爾型)。一個方法能夠改變一個對象參數的狀態。 一個方法不能讓對象參數引用一個新的對象。
- 能夠爲任何一個類添加 finalize 方法。finalize 方法將在垃圾回收器清除對象以前調用。在實際應用中,不要依賴於使用 finalize 方法回收任何短缺的資源, 這是由於很難知道這個方法何時纔可以調用。
- 類設計技巧:1. 必定要保證數據私有 2. 必定要對數據初始化 3. 不要在類中使用過多的基本類型 4. 不是全部的域都須要獨立的域訪問器和域更改器 5.將職責過多的類進行分解 6. 類名和方法名要可以體現它們的職責 7.優先使用不可變的類,若是多個線程試圖同時更新一個對象,就會發生併發更改。其結果是不可預料的。若是類是不可變的,就能夠安全地在多個線程間共享其對象。
-


由三張圖可知,加載順序爲父類靜態變量-靜態代碼塊-子類靜態變量-靜態代碼塊-父類代碼塊-父類構造方法-子類代碼塊-子類構造方法。
歡迎關注本站公眾號,獲取更多信息