筆試題:Java中的靜態(tài)塊語句、塊語句
以下是一道筆試題:?
Java代碼??package?com.example;??
??
public?class?Parent??
{??
????public?Parent()??
????{??
????????System.out.println("Parent>>>>>>>>>>>1");??
????}??
??
????{??
????????System.out.println("Parent>>>>>>>>>>>2");??
????}??
????static??
????{??
????????System.out.println("Parent>>>>>>>>>>>3");??
????}??
}??
Java代碼??package?com.example;??
??
public?class?Child?extends?Parent??
{??
????public?Child()??
????{??
????????System.out.println("Child>>>>>>>>>>>1");??
????}??
??
????{??
????????System.out.println("Child>>>>>>>>>>>2");??
????}??
????static??
????{??
????????System.out.println("Child>>>>>>>>>>>3");??
????}??
??
????public?static?void?main(String[]?args)??
????{??
????????new?Child();??
????}??
}??
請(qǐng)寫出上面程序的執(zhí)行結(jié)果。?
此題是考查靜態(tài)語句塊、語句塊以及構(gòu)造函數(shù)的執(zhí)行順序。?
分析:對(duì)象的初始化順序:首先執(zhí)行父類靜態(tài)的內(nèi)容,父類靜態(tài)的內(nèi)容執(zhí)行完畢后,接著去執(zhí)行子類的靜態(tài)的內(nèi)容,當(dāng)子類的靜態(tài)內(nèi)容執(zhí)行完畢之后,再去看父類有沒有非靜態(tài)代碼塊,如果有就執(zhí)行父類的非靜態(tài)代碼塊,父類的非靜態(tài)代碼塊執(zhí)行完畢,接著執(zhí)行父類的構(gòu)造方法;父類的構(gòu)造方法執(zhí)行完畢之后,它接著去看子類有沒有非靜態(tài)代碼塊,如果有就執(zhí)行子類的非靜態(tài)代碼塊。子類的非靜態(tài)代碼塊執(zhí)行完畢再去執(zhí)行子類的構(gòu)造方法??傊痪湓?,靜態(tài)代碼塊內(nèi)容先執(zhí)行,接著執(zhí)行父類非靜態(tài)代碼塊和構(gòu)造方法,然后執(zhí)行子類非靜態(tài)代碼塊和構(gòu)造方法。?
而且子類的構(gòu)造方法,不管這個(gè)構(gòu)造方法帶不帶參數(shù),默認(rèn)的它都會(huì)先去尋找父類的不帶參數(shù)的構(gòu)造方法。如果父類沒有不帶參數(shù)的構(gòu)造方法,那么子類必須用supper關(guān)鍵子來調(diào)用父類帶參數(shù)的構(gòu)造方法,否則編譯不能通過。?
因此執(zhí)行結(jié)果是:?
Java代碼??Parent>>>>>>>>>>>3??
Child>>>>>>>>>>>3??
Parent>>>>>>>>>>>2??
Parent>>>>>>>>>>>1??
Child>>>>>>>>>>>2??
Child>>>>>>>>>>>1