類的載入順序總結
阿新 • • 發佈:2018-12-20
/**
*
* @author jiashihao
*
*/
public class HelloA {
public HelloA(){
System.out.println("HelloA");
}
{
System.out.println("I'm A class");
};
static{
System.out.println("static A");
}
}
public class HelloB extends HelloA { public HelloB(){ System.out.println("HelloB"); } { System.out.println("I'm B class"); }; static{ System.out.println("static B"); } public static void main(String[] args) { /** * 順序預測: * -------------HelloB start------------------ * HelloA * static A * I'm A class * HelloB * static B * I'm B class * -------------HelloB end------------------ * -------------HelloA start------------------ * HelloA * I'm A class */ System.out.println("-------------HelloB start------------------"); new HelloB(); System.out.println("-------------HelloB end------------------"); System.out.println("-------------HelloA start------------------"); new HelloA(); System.out.println("-------------HelloA end------------------"); } }
執行結果如下:
static A
static B
-------------HelloB start------------------
I'm A class
HelloA
I'm B class
HelloB
-------------HelloB end------------------
-------------HelloA start------------------
I'm A class
HelloA
-------------HelloA end------------------
總結:父類的靜態初始化塊|靜態屬性 > 子類的靜態初始化塊|靜態屬性> 父類的普通初始化塊|普通屬性>父類的構造器>子類的普通初始化塊|普通屬性>子類的構造器
初始化快的優先順序要高於構造器,靜態的先執行原因是靜態的需要在方法區載入,所以會首先執行,帶|表示誰在前誰先執行