Java初始化詳解

2021-07-25 16:59:50 字數 1452 閱讀 7581

先上**,根據**來分析

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 新建物件例項,對非靜態的成員變數進...