Java 靜態語句塊、語句塊、構造函數執行順序


class Parent{    
    static String name = "hello";    
    
    {    
        System.out.println("3 parent  block");    
    }    
    static {    
        System.out.println("1 parent static block");    
    }    
    
    public Parent(){    
        System.out.println("4 parent constructor");    
    }    
}    
    
class Child extends Parent{    
    static String childName = "hello";    
    
    {    
        System.out.println("5 child  block");    
    }    
    static {    
        System.out.println("2 child static block");    
    }  
    
    public Child(){    
        System.out.println("6 child constructor");    
    }    
}    
    
public class StaticIniBlockOrderTest {    
    
    public static void main(String[] args) {    
        new Child();//語句(*)    
    }    
}    

結果:

1 parent static block
2 child static block
3 parent block
4 parent constructor
5 child block
6 child constructor

2. 順序:

   1)執行父類靜態的內容,父類靜態的內容執行完畢后,接着去執行子類的靜態的內容;

   2)當子類的靜態內容執行完畢之后,再去看父類有沒有非靜態代碼塊,如果有就執行父類的非靜態代碼塊,父類的非靜態代碼塊執行完畢,接着執行父類的構   造方法;

  3)父類的構造方法執行完畢之后,它接着去看子類有沒有非靜態代碼塊,如果有就執行子類的非靜態代碼塊。子類的非靜態代碼塊執行完畢再去執行子類的構造方法。

總之一句話,靜態代碼塊內容先執行,接着執行父類非靜態代碼塊和構造方法,然后執行子類非靜態代碼塊和構造方法。
而且子類的構造方法,不管這個構造方法帶不帶參數,默認的它都會先去尋找父類的不帶參數的構造方法。如果父類沒有不帶參數的構造方法,那么子類必須用supper關鍵子來調用父類帶參數的構造方法,否則編譯不能通過。

 


免責聲明!

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



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