1. 程式人生 > >類的載入順序總結

類的載入順序總結

/**
 * 
 * @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------------------

總結:父類的靜態初始化塊|靜態屬性 > 子類的靜態初始化塊|靜態屬性> 父類的普通初始化塊|普通屬性>父類的構造器>子類的普通初始化塊|普通屬性>子類的構造器

初始化快的優先順序要高於構造器,靜態的先執行原因是靜態的需要在方法區載入,所以會首先執行,帶|表示誰在前誰先執行