高質量程式設計讀書筆記之類和物件
阿新 • • 發佈:2018-12-04
1.類的生命週期由類載入器載入開始,到類解除安裝結束,其中會經過連線、初始化等操作:
1.當類載入器預感到需要使用 該類時,會主動載入該類的二進位制資料,產生的結果為:
1.讀取二進位制資料到方法區;
2.在堆記憶體中生成該類對應的Class物件,用以描述方法區中二進位制資料對應的類結構;
2.進入連線階段:
驗證:即驗證二進位制資料對應的類結構是否正確;
準備:為所有的靜態變數申請記憶體,並設定對應資料型別的預設值;
解析:將二進位制資料中的符號引用替換為直接引用(地址引用),也就是把A.b()修改為指向A類二進位制方法區b方法的記憶體地址;
3.類的初始化:
觸發類初始化的條件是類的主動使用,目前有五種類的主動使用:
1.建立類的例項(類的五種建立方式);
2.呼叫類的靜態方法會導致當前類初始化(靜態方法所在的類);
3.訪問類或者介面的靜態變數,或者為其賦值會導致當前類初始化(靜態變數所在的類或者介面);
4.某些反射方法,如Class.forName(“A”);
5.初始化一個類的子類,如果此時父類還沒有初始化,則會先初始化父類;
4.靜態方法和靜態變數屬於類,不屬於物件,所以呼叫的時候首先會去匹配呼叫者的表面物件型別;
5.java中一共有4種程式碼塊,方法程式碼塊、靜態程式碼塊、同步程式碼塊和構造程式碼塊,構造程式碼塊用{}表示,會插入在建構函式的第一句並執行,其會過濾this關鍵字;
6.使用靜態內部類,其不持有外部類的引用,且能定義靜態變數和方法,可以說形似內部類,神似外部類;
7.複寫equals時,應滿足自反性、對稱性和傳遞性,並複寫hashcode方法;