靜態(tài)代碼塊執(zhí)行順序

static標(biāo)明的變量、方法、代碼塊都屬于類所有,僅在類加載時進(jìn)行唯一一次初始化。

1.不管靜態(tài)成員變量聲明語句的實際位置在哪,當(dāng)?shù)谝淮渭虞d類的時候都會首先對它初始化缺省值(0,false,null)。

2.即使靜態(tài)成員變量聲明中使用了顯式初始化語句,第一次加載類的時候也會把它初始化缺省值。

3.對于靜態(tài)成員變量的顯示初始化語句和靜態(tài)初始化塊,按照在中代碼出現(xiàn)的先后順序執(zhí)行。

當(dāng)構(gòu)造類實例時候,會先對實例成員變量初始化缺省值,然后執(zhí)行初始化塊,然后執(zhí)行構(gòu)造方法

a.如同1中一樣,如果實例成員變量的顯式初始化語句,程序仍然是先將該成員變量初始化為缺省值,然后按照代碼在類中出現(xiàn)的先后順序執(zhí)行初始化或者初始化塊。

b.在進(jìn)入構(gòu)造方法后,如果構(gòu)造方法第一句是使用this,調(diào)用另一個構(gòu)造方法的話,則先執(zhí)行另一個構(gòu)造方法,然后再執(zhí)行本構(gòu)造方法的方法體。

public class Parent {

public void test() {

A = 3;
System.out.println("test1方法" + A);
}
static {
System.out.println("Parent 靜態(tài)代碼塊執(zhí)行");
A = 2;
}
public static int A =1;
public Parent(){
System.out.println("Parent構(gòu)造方法執(zhí)行");
}
}

public class Son extends Parent {

public static int B = A;

static {

System.out.println("Son靜態(tài)代碼塊執(zhí)行");

}

public Son() {

System.out.println("Son構(gòu)造方法執(zhí)行");

}

}

public class Hello {

public static void main(String[] args) {
Parent parent1 = new Parent();
Parent parent2 = new Son();
Son parent3 = new Son();
}
}

1.實例化parent中靜態(tài)代碼塊、方法、變量,按照順序一個一個來,然后才是構(gòu)造方法。

2.實例化son,父類引用指向子類對象,先執(zhí)行父類的靜態(tài),然后是子類靜態(tài),然后父類構(gòu)造方法,然后是子類構(gòu)造方法

3.實例化son,執(zhí)行son中構(gòu)造方法,因為上面已經(jīng)執(zhí)行完靜態(tài),靜態(tài)僅在執(zhí)行一次。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容