父類Parent如下:
public class Parent {
public static int age;
char name;
{ System.out.println("非靜態(tài)屬性name的值為"+name+";說明非靜態(tài)屬性已經(jīng)初始化");
System.out.println("父類的代碼塊");
}
static{
System.out.println("靜態(tài)屬性age的值為"+age+";說明靜態(tài)屬性已經(jīng)初始化");
System.out.println("父類的靜態(tài)代碼塊");
}
Parent(){
System.out.println("父類無參構(gòu)造");
}
}
子類Child如下:
public class Child extends Parent{
{
System.out.println("子類的代碼塊");
}
static{
System.out.println("子類的靜態(tài)代碼塊");
}
Child(){
System.out.println("子類無參構(gòu)造");
}
public static void main(String[] args) {
System.out.println("-------------new第1個對象-------------");
Child c = new Child();
System.out.println("-------------new第2個對象-------------");
Child c1 = new Child();
}
}
測試結(jié)果:
image.png
由上可以看出
step1:先加載child類,發(fā)現(xiàn)有父類則先加載父類,
加載過程:初始化靜態(tài)變量-->執(zhí)行父類靜態(tài)塊-->初始化實例變量
然后加載子類,執(zhí)行子類靜態(tài)塊
step2:執(zhí)行new探颈,先執(zhí)行父類里普通代碼塊败匹,再執(zhí)行父類無參構(gòu)造,接著是子類的普通代碼塊僻肖,子類的無參構(gòu)造
step3:第二次new的時候,由于類已經(jīng)加載過卢鹦,重復(fù)step2