《Java核心技術 卷1》 - 20240711

1. 編譯器編譯的時候不檢查目錄結構,但虛擬機會檢查;

如果不依賴其他包,即使目錄結構和包名不匹配也可以編譯成功,但如果不匹配的話,虛擬機會找不到這些類,導致無法運行;

2. 不顯示聲明訪問修飾符(public、private)的類和成員變量是包可訪問的(默認包可訪問);
  • private ---- 僅本類可以訪問;
  • 默認 --- 本包可以訪問,不需要修飾符;
  • protected --- 本包和所有子類可以訪問;
  • public --- 外部也可訪問;
3.如果將一個類聲明為final,只有其中的方法自動地成為final,而不包括字段;
4. super并非和this引用是類似的概念;
  • super不是一個對象的引用,它只是指示編譯器調用父類方法的特殊關鍵字,所以不能將super賦給另一個對象變量(this是可以的);
  • super有兩個含義:調用父類的方法、調用父類的構造器;
  • this有兩個含義:指示隱式參數的引用、調用該類的其他構造器;
5. 最好通過調用getClass().getName()獲得類名的字符串,不要將類名硬編碼;
6. 可以使用sealed class(密封類)控制哪些類可以繼承它。
public abstract sealed class JSONValue permits JSONArray, JSONNumber, JSONString, 
JSONBoolean, JSONObject, JSONNull {
// ...
}
  • 不使用permits子句的話,它的所有直接子類都必須在同一個文件中聲明;
  • 密封類的子類必須指定是sealed、final,還是允許繼續派生子類(non-sealed);
7. 接口中的所有方法都自動是public的;

所以在實現接口方法時需要顯示聲明為public,否則就會編譯報錯:試圖提供更嚴格的訪問權限;

8. 使用default修飾符標記接口提供的默認實現;
public interface Collection {
    int size(); //an abstract method
    default boolean isEmpty() { return size() == 0; }
    ...
}
  • 當某個接口默認方法與另一個接口方法相同時,兩者的同一實現類必須重寫該方法;
  • 類優先原則。即當默認方法和父類方法相同時,子類會優先繼承父類實現;
9. Object.clone提供的是淺拷貝,要想深拷貝,需要重新實現clone方法將子引用的可變對象也clone;
  • Date時可變的,LocalDate是不可變的(因為對其操作都會返回一個新的實例);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容