靜態程式碼塊、非靜態程式碼塊、建構函式三者執行順序
阿新 • • 發佈:2019-01-08
主要探討一下關於靜態程式碼塊,非靜態程式碼塊,建構函式的執行順序。
如有錯誤,歡迎指出。
首先:
靜態成員變數和靜態程式碼塊的優先順序是一樣的,先定義的先執行。
在建立一個物件的時候會執行非靜態程式碼塊和建構函式
再者是執行順序:
/*
*
*(1)父類靜態成員和靜態初始化塊,按在程式碼中出現的順序依次執行。
*
*(2)子類靜態成員和靜態初始化塊,按在程式碼中出現的順序依次執行。
*
*(3)父類例項成員和例項初始化塊,按在程式碼中出現的順序依次執行。
*
*(4)執行父類構造方法。
*
*(5)子類例項成員和例項初始化塊,按在程式碼中出現的順序依次執行。
*
*(6)執行子類構造方法。
*
*/
public class StaticTest {
public static StaticTest t1=new StaticTest(); //靜態成員變數,第一步執行
public static void main(String args[]) {
StaticTest t2=new StaticTest(); //第三步執行
}
//靜態程式碼塊
static{
System.out.println("B");//第二步執行
}
//非靜態程式碼塊
{
System.out.println("A" );
}
}
輸出:
A
B
A
再來看看這個程式碼,程式碼位置調換一下順序
public class StaticTest {
public static void main(String args[]) {
StaticTest t2=new StaticTest(); //第三步執行
}
//靜態程式碼塊
static{
System.out.println("B");//變成第一步執行
}
public static StaticTest t1=new StaticTest(); //靜態成員變數,變成第二步執行
//非靜態程式碼塊
{
System.out.println("A");
}
}
輸出:
B
A
A
所以驗證:
1.靜態成員變數和靜態程式碼塊的優先順序是一樣的,先定義的先執行。
2.在建立一個物件的時候會執行非靜態程式碼塊和建構函式。