class?A?{
????static?{
????????System.out.print("1");
????}????public?A()?{
????????System.out.print("2");
????}
}class?B?extends?A{
????static?{
????????System.out.print("a");
????}????public?B()?{
????????System.out.print("b");
????}
}public?class?Hello?{
????public?static?void?main(String[]?args)?{
????????A?ab?=?new?B();
????????ab?=?new?B();
????}
}為什么是1a2b2b,能說一說原理嗎?
2 回答

Home_羈絆
TA貢獻4條經(jīng)驗 獲得超6個贊
執(zhí)行順序:靜態(tài)代碼塊(類加載的時候執(zhí)行,先父類后子類?)?-->構造代碼塊(先父類后子類?)?-->構造函數(shù)?(先父類后子類?)
已采納

望遠
TA貢獻1017條經(jīng)驗 獲得超1032個贊
像一樓說的靜態(tài)代碼塊只會被執(zhí)行一次(類加載的時候執(zhí)行靜態(tài)代碼塊),實例化子類的時候會先實例化父類,說的清楚一點就是,具體步驟1,先加載父類,,2。加載子類,3.實例化父類,4,實例化子類;所以
A?ab?=?new?B();?//輸出?1?a?2?b??;
但是靜態(tài)代碼塊只會被執(zhí)行一次,所以
?ab?=?new?B();?//輸出?2?b
添加回答
舉報
0/150
提交
取消