Java之物件建構過程,java物件建構
Java中一個對象的構造過程如下:
1-6屬於初始化靜態部分,如果一個類的靜態部分已經初始化了(已經被類載入器載入了),就不會再重複初始化靜態部分,靜態部分的初始化只會在類載入器載入一個類的時候初始化一次。
1.用類載入器載入父類,按父類靜態變數定義的順序的為父類所有靜態變數分配空間,並賦予父類靜態變數預設值。
2.用類載入器載入自己,按自己靜態變數定義的順序的為自己所有靜態變數分配空間,並賦予自己靜態變數預設值。
3.按父類靜態變數定義的順序的為父類所有靜態變數賦上定義的值。
4.執行父類靜態代碼塊。
5.按自己靜態變數定義的順序的為自己所有靜態變數賦上定義的值。
6.執行自己靜態代碼塊。
7-14屬於初始化執行個體部分。
7.為父類執行個體變數分配空間,並賦予預設值。
8.為自己執行個體變數分配空間,並賦予預設值。
9.按父類執行個體變數定義的順序的為父類所有執行個體變數賦上定義的值。
10.執行父類的構造代碼塊。
11.執行父類的構造方法。
12.按自己執行個體變數定義的順序的為自己所有執行個體變數賦上定義的值。
13.執行自己的構造代碼塊。
14.執行自己的構造方法。
物件建構完成!
注意:
1.父類如果還有父類就也依照此順序先初始化父類的父類,直到Object為止。
2.如果執行步驟3、5、9、12時,定義的值引入了別的類,則會初始化那個類,如果引用的類還有引用的類則也按照此順序先初始化引用類的引用類,直到所有被引用的類全部被初始化完畢為止。
3.如果一個類沒有父類(如Object類),則它的初始化順序可以簡化成2、5、6、8、12、13、14。
4.如果這個類已經被類載入器載入過了,也就是該類的靜態部分已經初始化過了,那麼1、2、3、4、5、6都不會執行,總的順序可以簡化為7、8、9、10、11、12、13、14。
5.如果這個類沒有被類載入器載入,但它的父類已經被類載入器載入過了,那麼總的順序可以簡化為2、5、6、7、8、9、10、11、12、13、14。
轉載請標明原地址,請尊重原創,謝謝。