先上**,根據**來分析
class
initable
}
class
initable2
}
class
initable3
}
public
class
classinitialization
}
after
creating
initable
ref
47
initialization
initable
258
initialization
initable2
147
initialization
initable3
after
creating
initable
ref
74
初始化有效地實現了盡可能的「惰性」。從對initable引用的建立中可以看到,僅使用.class語法來獲得對類的引用不會引發初始化。
但是,為了產生class引用,class.forname()立即就進行了初始化,就像在對initable3引用的建立中所看到的。
如果乙個static final值是「編譯器常量」,就像initable.staticfinal那樣,那麼這個值不需要對initable類進行初始化就可以被讀取。但是只是將乙個域設定為static和final的,還不足以確保這種行為,例如,對initable.staticfinal2的訪問將強制進行類的初始化,因為它不是乙個編譯器常量。
如果乙個static域不是final的,那麼在對它訪問時,總是要求在它被讀取之前,要先進行鏈結(為這個域分配儲存空間)和初始化(初始化該儲存空間),就像在對initable2.staticnonfinal的訪問中所看到的那樣。
載入,這是由類載入器執行的。該步驟將查詢位元組碼,並從這些位元組碼中建立乙個class物件。
鏈結。在鏈結階段將驗證類中的位元組碼,為靜態域分配儲存空間,並且如果必需的話,將解析這個類建立的對其他類的所有引用。
初始化。如果該類具有超類,則對其初始化,執行靜態初始化器和靜態初始化塊。
java初始化順序
1 父類靜態成員和靜態初始化塊 按在 中出現的順序依次執行 2 子類靜態成員和靜態初始化塊 按在 中出現的順序依次執行 3 父類例項成員和例項初始化塊 按在 中出現的順序依次執行 4 父類構造方法 5 子類例項成員和例項初始化塊 按在 中出現的順序依次執行 6 子類構造方法 public abstr...
java初始化順序
例如以下 package chapter5 public class demo1one public void printinfo public static void main string args 程式一開始先執行 private static string password 0721 這行 ...
JAVA初始化順序
1 當使用新建物件例項或者呼叫靜態成員變數或者方法時,初始化靜態變數 2 靜態變數在初始化時在前面的先初始化,靜態塊和靜態變數相同對待 在初始化過程中,有新建物件例項的時候,暫時停止後面的靜態變數初始化 3 靜態變數沒有初始化時,使用預設的初始值 如int為0 4 新建物件例項,對非靜態的成員變數進...