1. 程式人生 > >JAVA父類子類靜態程式碼塊、靜態變數、構造方法的執行順序

JAVA父類子類靜態程式碼塊、靜態變數、構造方法的執行順序

1、第一個檔案Print.java
  1. public class Print {
  2.     public Print(String s){
  3.         System.out.print(+ " ");
  4.     }
  5. }

2、第二個檔案Test1.java
  1. public class Test1 {
  2.     public static Print obj1 = new Print("1");
  3.     public Print obj2 = new Print("2");
  4.     public static Print obj3 = new Print("3");
  5.     static{
  6.         new
     Print("4");
  7.     }
  8.     public static Print obj4 = new Print("5");
  9.     public Print obj5 = new Print("6");
  10.     public Test1(){
  11.         new Print("7");
  12.     }
  13. }

3、第三個檔案Test2.java
  1. public class Test2 extends Test1{
  2.     static{
  3.         new Print("a");
  4.     }
  5.     public static Print obj1 = new Print("b");
  6.     public
     Print obj2 = new Print("c");
  7.     public Test2(){
  8.         new Print("d");
  9.     }
  10.     public static Print obj3 = new Print("e");
  11.     public Print obj4 = new Print("f");
  12.     public static void main(String [] args){
  13.         Test1 obj1 = new Test2();
  14.         Test1 obj2 = new Test2();
  15.     }
  16. }

執行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、執行子類的建構函式
如果類已經被載入:

則靜態程式碼塊和靜態變數就不用重複執行,再建立類物件時,只執行與例項相關的變數初始化和構造方法。

轉載至http://blog.csdn.net/CommCsdn/article/details/50442073