java中父類子類靜態代碼塊、構造代碼塊執行順序


父類靜態(代碼塊,變量賦值二者按順序執行)

子類靜態

父類構造代碼塊

父類構造方法

子類構造代碼塊

子類構造方法

普通方法在實列調用的時候執行,肯定位於上面之后了

 1 //父類A
 2 public class A {
 3 
 4      A() {
 5          System.out.println("A構造方法");
 6      }
 7 
 8     {
 9          System.out.println("A構造代碼塊");
10      }
11     
12          static{
13          System.out.println("A靜態碼塊");
14      }
15 
16     public static void main(String[] args) {
17             C c1=new C();        
18         }
//子類C
public class C extends A {
    static {
        System.out.println("C的靜態代碼塊");
    }
    {
         System.out.println("C構造代碼塊");
     }
     C() {
        System.out.println("C的構造方法");
    }
}

結果:

 這樣就很明了了,下面稍微擴展一下,如果在main中出現 new A()呢?我們來看

 1 //父類A
 2 public class A {
 3 
 4     static{
 5          System.out.println("A靜態碼塊");
 6      }
 7     
 8      A() {
 9          System.out.println("A構造方法");
10      }
11      
12     {
13          System.out.println("A構造代碼塊");
14      }
15     public static void main(String[] args) {
16             A a=new A();
17             C c1=new C();
18         }    
//子類C
public class C extends A {
    static {
        System.out.println("C的靜態代碼塊");
    }
    {
         System.out.println("C構造代碼塊");
     }
     C() {
        System.out.println("C的構造方法");
    }
}

結果:

  結果先執行完父類A,只執行子類C,並不是執行完A的靜態就執行C的靜態,這里可能有誤區。

博主實測,歡迎指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM