很長時間沒看這方面的內(nèi)容了儿捧,寫篇文章讓自己牢記一下,順便分享一下戳鹅。
首先疮装,寫代碼以便檢驗結(jié)果磺芭。
測試代碼:
public class Test {
public static void main(String[] args) {
new Test2();
}
}
子類代碼:
public class Test2 extends Test3{
{
System.out.println("子類代碼塊");
}
private String address = getAddress();
static{
System.out.println("子類靜態(tài)代碼塊");
}
private static String name = get1Name();
public Test2() {
System.out.println("子類構(gòu)造方法");
}
private String getAddress() {
System.out.println("子類成員變量");
return null;
}
private static String get1Name() {
System.out.println("子類靜態(tài)變量");
return null;
}
}
父類代碼:
public class Test3 {
private static String name = getName();
private String address = getAddress();
static{
System.out.println("父類靜態(tài)代碼塊");
}
{
System.out.println("父類代碼塊");
}
public Test3() {
System.out.println("父類構(gòu)造函數(shù)");
}
private String getAddress() {
System.out.println("父類成員變量");
return null;
}
private static String getName() {
System.out.println("父類靜態(tài)變量");
return null;
}
}
以上代碼就可以檢驗出類加載的順序了。
運(yùn)行代碼灸姊,控制臺打印結(jié)果如下:
有父類的情況.png
無父類的情況.png
多次調(diào)換代碼先后順序,發(fā)現(xiàn) 變量和代碼塊的加載順序和在代碼中的先后順序有關(guān)隶债。
總結(jié)一下:
無父類情況下腾它,加載順序為:
靜態(tài)成員變量、靜態(tài)代碼塊 ---》 成員變量死讹、代碼塊 ----》 構(gòu)造方法瞒滴。
有父類的情況下,加載順序為:
父類靜態(tài)成員變量赞警、父類靜態(tài)代碼塊 ---》 子類靜態(tài)成員變量妓忍、子類靜態(tài)代碼塊 -----》 父類成員變量、父類代碼塊
----》 父類構(gòu)造方法 -----》 子類成員變量愧旦、子類代碼塊 ----》 子類構(gòu)造方法世剖。