Java加載時的優先級之成員變量、代碼塊、靜態代碼塊、靜態變量和構造函數

 public class Parent{
 
     public static Print obj1 = new Print("1");
 
     public Print obj2 = new Print("2");
 
     public static Print obj3 = new Print("3");
 
     static{
         new Print("4");
     }
 
     public static Print obj4 = new Print("5");
 
     public Print obj5 = new Print("6");
 
     public Parent(){
         new Print("7");
     }
 
 }

 public class Child extends Parent{
 
     static{
         new Print("a");
     }
 
     public static Print obj1 = new Print("b");
 
     public Print obj2 = new Print("c");
 
     public Child (){
         new Print("d");
     }
 
     public static Print obj3 = new Print("e");
 
     public Print obj4 = new Print("f");
 
     public static void main(String [] args){
         Parent obj1 = new Child ();
         Parent obj2 = new Child ();
     }
 }

**執行main方法,程序輸出順序爲: 1 3 4 5 a b e 2 6 7 c f d 2 6 7 c f d
**

輸出結果表明,程序的執行順序爲:
如果類還沒有被加載:
1、先執行父類的靜態代碼塊和靜態變斜體樣式量初始化,並且靜態代碼塊和靜態變量的執行順序只跟代碼中出現的順序有關。
2、執行子類的靜態代碼塊和靜態變量初始化。
3、執行父類的實例變量初始化
4、執行父類的構造函數
5、執行子類的實例變量初始化
6、執行子類的構造函數

如果類已經被加載:
則靜態代碼塊和靜態變量就不用重複執行,再創建類對象時,只執行與實例相關的變量初始化和構造方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章