package staticSuper;
class StaticSuper {
static {
System.out.println("super static block");
}
StaticSuper(){
System.out.println("super constructor");
}
}
public class StaticTests extends StaticSuper {
static {
System.out.println("static block");
}
StaticTests(){
System.out.println("main class");
}
public static void main(String args[]) {
System.out.println("in main");
}
}
結(jié)果:
super static blockstatic block
疑問:父類的static塊的內(nèi)容先于子類的static塊的內(nèi)容執(zhí)行,感覺上就像是實(shí)例化子類時(shí)先實(shí)例化父類??蓡栴}是兩個(gè)類的構(gòu)造函數(shù)中要求的輸出統(tǒng)統(tǒng)都沒有,因此引發(fā)了我的疑惑——第一,主類,就這里的staticTests到底有沒有被實(shí)例化?能否用一個(gè)引用變量指向它?第二,如果被實(shí)例化了,為何能夠繞過構(gòu)造器?如果沒有被實(shí)例化,那為什么運(yùn)行了static中的內(nèi)容?為什么父類中的static先于子類中的static?謝謝
1 回答

侃侃爾雅
TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
對象初始化過程:
(1) 主類的超類由高到低按順序初始化靜態(tài)成員
(2) 主類靜態(tài)成員的初始化。
//創(chuàng)建實(shí)例時(shí),如果不創(chuàng)建實(shí)例,則后面的不執(zhí)行 ,你這了就沒有創(chuàng)建實(shí)例
(3) 主類的超類由高到低進(jìn)行默認(rèn)構(gòu)造方法的調(diào)用,在調(diào)用每一個(gè)超類的默認(rèn)構(gòu)造方法前,先對此超類進(jìn)行非靜態(tài)成員的初始化。
(4) 主類非靜態(tài)成員的初始化。
(5) 主類的構(gòu)造方法。
添加回答
舉報(bào)
0/150
提交
取消