java中class的初始化順序

含有繼承的類的初始化順序:父類的靜態變量->父類的靜態塊->子類靜態變量->子類靜態初始化塊->父類變量->父類初始化塊->父類的構造函數->子類的變量->子類初始化塊->子類構造函數;(變量和初始化塊之間的先後順序根據類中的先後位置而定)

Code:
  1. public class InitialClassOrderTest extends InitialClassOrderBasic{   
  2.     // 靜態變量   
  3.     public static String staticField = "靜態變量";   
  4.     // 變量   
  5.     public String field = "變量";   
  6.   
  7.     // 靜態初始化塊   
  8.     static {   
  9.         System.out.println(staticField);   
  10.         System.out.println("靜態初始化塊");   
  11.     }   
  12.   
  13.     // 初始化塊   
  14.     {   
  15.         System.out.println(field);   
  16.         System.out.println("初始化塊");   
  17.     }   
  18.   
  19.     // 構造器   
  20.     public InitialClassOrderTest() {   
  21.         System.out.println("構造器");   
  22.     }   
  23.   
  24.     public static void main(String[] args) {   
  25.         new InitialClassOrderTest();   
  26.     }   
  27. }  
Code:
  1. public class InitialClassOrderBasic {   
  2.     // 靜態變量   
  3.     public static String staticField = "父類靜態變量";   
  4.     // 變量   
  5.     public String field = "父類變量";   
  6.   
  7.     // 靜態初始化塊   
  8.     static {   
  9.         System.out.println(staticField);   
  10.         System.out.println("父類靜態初始化塊");   
  11.     }   
  12.   
  13.     // 初始化塊   
  14.     {   
  15.         System.out.println(field);   
  16.         System.out.println("父類初始化塊");   
  17.     }   
  18.   
  19.     // 構造器   
  20.     public InitialClassOrderBasic() {   
  21.         System.out.println("父類構造器");   
  22.     }   
  23.   
  24. }  

 執行結果:

Code:
  1. 父類靜態變量   
  2. 父類靜態初始化塊   
  3. 靜態變量   
  4. 靜態初始化塊   
  5. 父類變量   
  6. 父類初始化塊   
  7. 父類構造器   
  8. 變量   
  9. 初始化塊   
  10. 構造器   

 詳見http://zangweiren.javaeye.com/blog/208122

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