類的初始化順序

2022-09-19 14:51:14 字數 838 閱讀 9476

建立乙個物件的執行順序如下:

不存在父類

靜態成員顯示初始化

靜態**塊

main函式(如果存在main函式的話)

成員變數初始化

初始化**塊

建構函式

其中1)與2) 以及4)與5)的順序可以相反,初始化順序按照**的先後順序執行,但是變數還是在最先定義的,但是該變數必須是基本變數,並且在(靜態)初始化**塊中只能進行初始化,不能進行呼叫,且初始化的順序為**書寫的先後順序;如果是乙個引用,必須在定義在靜態初始化**塊前,

存在父類

1)父類靜態成員顯示初始化

2)父類靜態**塊

3)子類靜態成員顯示初始化

4)子類靜態**塊

5)子類主函式(如果存在main函式的話)

父類成員變數初始化

父類初始化**塊

父類建構函式

子類成員變數初始化

子類初始化**塊

子類建構函式

關於顯示初始化與**塊初始化的問題與不存在父類中的問題一致

驗證的**如下:

public class test2 extends person

static

public static int p;

public int age = 20;

public test2()

public static void main(string args)

}class person

static

public person()

}

類初始化順序

類初始化時,jvm會先初始化所有 1,靜態屬性,靜態例項,靜態塊。2.新建例項 靜態或非靜態 時會先執行所有非靜態屬性和構造塊 非靜態屬性和構造塊執行級別相同,誰前誰先 然後構造方法。注意 1 靜態 塊不能存在於任何方法體內。2 靜態 塊不能直接訪問靜態例項變數和例項方法,需要通過類的例項物件來訪問...

類初始化順序

類初始化順序 1.靜態構造塊最先執行,並只執行一次 2.成員變數執行,但靜態成員變數早於靜態塊執行 3.構造塊從上至下依次執行 4.構造方法執行 父類早於子類 父類靜態構造塊 子類靜態構造塊 父類成員變數 父類構造塊 父類構造方法 子類成員變數 子類構造塊 子類構造方法 靜態成員變數先於靜態塊執行 ...

類的初始化順序

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