以下這段小程序?qū)φ{(diào)用對(duì)象構(gòu)造函數(shù)時(shí),父類構(gòu)造函數(shù)、成員變量初始化函數(shù),以及非靜態(tài)初始化塊調(diào)用順序進(jìn)行驗(yàn)證,不考慮靜態(tài)成員及靜態(tài)初始化塊。
public class Derive extends Base
{
private Member m1 = new Member("Member 1");
{
System.out.println("Initial Block()");
}
public Derive() {
System.out.println("Derive()");
}
private Member m2 = new Member("Member 2");
private int i = getInt();
private int getInt()
{
System.out.println("getInt()");
return 2;
}
public static void main(String[] args)
{
new Derive();
}
}
class Base
{
public Base()
{
System.out.println("Base()");
}
}
class Member
{
public Member(String m)
{
System.out.println("Member() "+m);
}
}
/*程序輸出:
Base()
Member() Member 1
Initial Block()
Member() Member 2
getInt()
Derive()
*/ www.qcwyo68.com
得出結(jié)論如下:不考慮靜態(tài)成員的初始化,調(diào)用一個(gè)對(duì)象的構(gòu)造函數(shù)時(shí),程序先調(diào)用父類的構(gòu)造函數(shù)(可以通過super關(guān)鍵字指定父類的構(gòu)造函數(shù),否則默認(rèn)調(diào)用無參的構(gòu)造函數(shù),并且需要在子類的構(gòu)造函數(shù)的第一行調(diào)用),之后靜態(tài)成員變量的初始化函數(shù)和靜態(tài)初始化塊則按照在代碼當(dāng)中的順序執(zhí)行,成員變量如果沒有指定值的話則賦予默認(rèn)值,即基本數(shù)據(jù)類型為0或false等,對(duì)象則為null;最后調(diào)用自身構(gòu)造函數(shù)。 www.lefeng123.com