JAVA初始化順序

2021-07-29 10:36:25 字數 1511 閱讀 2736

我直接用例子說明一下

public

class

testinit

public

initialordertest()

public

static

void

main( string args )

}

1.靜態變數

2.靜態初始化塊

3.變數

4.初始化塊

5.構造器

對於靜態變數、靜態初始化塊、變數、初始化塊、構造器,它們的初始化順序是靜態變數》靜態初始化塊》變數》初始化塊》構造器

public

class

a

public

a()

}public

class

bextends

a

public

b()

public

static

void

main(string args)

}

1.父類靜態變數

2.父類靜態初始化塊

3.子類靜態變數

4.子類靜態初始化塊

5.main方法

6.父類變數

7.父類初始化塊

8.父類構造器

9.子類變數

10.子類初始化塊

11.子類構造器

子類的靜態變數和靜態初始化塊的初始化是在父類的變數、初始化塊和構造器初始化之前就完成了。靜態變數、靜態初始化塊,變數、初始化塊初始化了順序取決於它們在類中出現的先後順序。

class super 

}class son extends super

}public

class

noninit

}

由此可以看出,通過陣列定義來引用類,不會觸發此類的初始化(僅僅只是引用)

public

class

finalinit

}class finalfieldclass

public

static

final string finalfield = "final變數";

}

1.final變數

這裡沒有初始化finalfieldclass類,是因為在編譯的時候,常量(static final 修飾的)會存入呼叫類的常量池(此處是main函式所在的類的常量池),呼叫的時候本質上沒有引用到定義常量的類,而是直接訪問了自己的常量池,所以不會觸發類的初始化

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