看了這個再也不會弄混類的初始化順序了

2021-06-16 02:23:52 字數 459 閱讀 3599

靜態初始化塊:使用關鍵字static定義的**塊。當類裝載到系統時執行一次,靜態初始化塊只能初始化類的靜態資料成員。

非靜態初始化塊:對每個要生成的物件執行一次。可以初始化靜態資料成員以及例項資料成員。

乙個類可以有多個初始化塊,在同種型別情況下,它們將按照在程式中出現的順序執行,但是有如下規則:

靜態初始化塊在非靜態初始化塊之前執行。

靜態/非靜態初始化塊在建構函式之前執行。

當類建立乙個物件了的初始順序:

1.  父類靜態成員和靜態初始化塊 ,按在**中出現的順序依次執行

2.  子類靜態成員和靜態初始化塊 ,按在**中出現的順序依次執行

3.  父類例項成員和例項初始化塊 ,按在**中出現的順序依次執行

4.  父類構造方法

5.  子類例項成員和例項初始化塊 ,按在**中出現的順序依次執行

6.  子類構造方法

類的初始化順序

寫了這麼多類 還沒仔細考慮過初始化順序 今天特意看了點這方面的知識 照著寫了個例子 初始化順序是 靜態變數 靜態初始化快 變數 初始化塊 建構函式 例子如下 public class classinitorder public classinitorder public static void ma...

類的初始化順序

不含繼承關係的類的初始化 類的靜態屬性 自上而下 類的靜態構造方法 類的非靜態屬性 類的非靜態構造方法 含有繼承關係的子類的初始化 一般的初始化過程 子類的靜態屬性 子類的靜態構造方法 子類的非靜態屬性 父類的靜態屬性 父類的靜態構造方法 父類的非靜態屬性 父類的非靜態構造方法 子類的非靜態構造方法...

類的初始化順序

建立乙個物件的執行順序如下 不存在父類 靜態成員顯示初始化 靜態 塊 main函式 如果存在main函式的話 成員變數初始化 初始化 塊 建構函式 其中1 與2 以及4 與5 的順序可以相反,初始化順序按照 的先後順序執行,但是變數還是在最先定義的,但是該變數必須是基本變數,並且在 靜態 初始化 塊...