筆試題: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();??
????}??
}??
請寫出上面程序的執(zhí)行結果。?
此題是考查靜態(tài)語句塊、語句塊以及構造函數(shù)的執(zhí)行順序。?
分析:對象的初始化順序:首先執(zhí)行父類靜態(tài)的內容,父類靜態(tài)的內容執(zhí)行完畢后,接著去執(zhí)行子類的靜態(tài)的內容,當子類的靜態(tài)內容執(zhí)行完畢之后,再去看父類有沒有非靜態(tài)代碼塊,如果有就執(zhí)行父類的非靜態(tài)代碼塊,父類的非靜態(tài)代碼塊執(zhí)行完畢,接著執(zhí)行父類的構造方法;父類的構造方法執(zhí)行完畢之后,它接著去看子類有沒有非靜態(tài)代碼塊,如果有就執(zhí)行子類的非靜態(tài)代碼塊。子類的非靜態(tài)代碼塊執(zhí)行完畢再去執(zhí)行子類的構造方法。總之一句話,靜態(tài)代碼塊內容先執(zhí)行,接著執(zhí)行父類非靜態(tài)代碼塊和構造方法,然后執(zhí)行子類非靜態(tài)代碼塊和構造方法。?
而且子類的構造方法,不管這個構造方法帶不帶參數(shù),默認的它都會先去尋找父類的不帶參數(shù)的構造方法。如果父類沒有不帶參數(shù)的構造方法,那么子類必須用supper關鍵子來調用父類帶參數(shù)的構造方法,否則編譯不能通過。?
因此執(zhí)行結果是:?
Java代碼??Parent>>>>>>>>>>>3??
Child>>>>>>>>>>>3??
Parent>>>>>>>>>>>2??
Parent>>>>>>>>>>>1??
Child>>>>>>>>>>>2??
Child>>>>>>>>>>>1





