public class person
}
person p = new person()
1、將 person.class 檔案載入到記憶體
2、在棧記憶體之中為 p 開闢空間
3、在堆記憶體中為 person 物件開闢空間
4、對 person 物件的成員變數進行預設初始化:name = null, age = 0
5、對 person 物件的成員變數進行顯示初始化:name = 「張三」,age =18
6、通過構造方法對 person 物件的成員變數賦值:name = 「李四」, age=28
7、 person 物件初始化完成,將物件位址賦值給 p
1、乙個類的靜態**塊、構造**塊、構造方法的執行流程:
靜態**塊》構造**塊》構造方法
構造**塊和構造方法會在呼叫構造的時候執行
2、靜態的內容是隨著類的載入而載入,靜態**塊的內容會優先執行
3、子類初始化之前會先對父類進行初始化
public class fu
public fu ()
}public class zi extends fu
public fu ()
}public class testdemo
}
在 zi z 的時候會先對 zi 進行載入,而在對 zi 進行載入之前 fu 進行載入。類在載入的時候會優先載入靜態**塊,而構造**塊和構造方法在調構造的時候才會執行
fu 的靜態**塊
zi 的靜態**塊
接下來 new zi() 會先呼叫 fu 的構造,執行 fu 的構造**塊和構造方法,然後呼叫 zi 的構造**塊和構造方法
fu 的構造**塊
fu 的建構函式
zi 構造**塊
zi 的建構函式
總結:1、建立物件並非在建構函式中進行(在建構函式中可以使用 this 可以看出,在呼叫構造方法時,物件就已經存在),而是在執行 "new" 關鍵字的時候,建構函式只是為了對資料進行初始化
2、在執行 "new" 關鍵字,即建立物件的時候,會首先載入父類,然後再載入本類,載入順序為:預設初始化、顯示初始化、建構函式初始化
java 類的初始化
載入順序 啟動類的static block最先載入 父類靜態成員 靜態 塊 子類靜態成員 靜態 塊 父類例項成員 塊 父類建構函式 子類例項成員 塊 子類建構函式 class singleton public static singleton getinstence public class tes...
java類的初始化
public class finaltest public static int aa static 下面是乙個測試類 public class test 輸出結果 0 當我們將 public static final int a 0 改為 public static int a 0 輸出結果為 p...
Java類初始化2
public class test2 class t t int a 5 static int b 7 class g g 輸出 main starts g starts t starts說明 1 從main進入 輸出 main starts 定義變數t t new t 2 載入類t,初始化類t中的...