Java靜態代碼塊、構造代碼塊、構造方法的執行順序

來源:互聯網
上載者:User

標籤:java   靜態代碼塊   構造代碼塊   構造方法   

Java靜態代碼塊、構造代碼塊、構造方法的執行順序

靜態代碼優先於非靜態代碼,是因為被static修飾的成員都是類成員,會隨著JVM載入類的時候載入而執行,而沒有被static修飾的成員也被稱為執行個體成員,需要建立對象才會隨之載入到堆記憶體。所以靜態會優先非靜態。
執行構造器(構造方法)的時候,在執行方法體之前存在隱式三步
1,super語句,可能出現以下三種情況:
1)構造方法體的第一行是this語句,則不會執行隱式三步,
2)構造方法體的第一行是super語句,則調用相應的父類的構造方法,
3)構造方法體的第一行既不是this語句也不是super語句,則隱式調用super(),即其父類的預設構造方法,這也是為什麼一個父類通常要提供預設構造方法的原因;
2,初始化非靜態變數
3,構造代碼塊
由此可知,構造代碼塊優先於構造方法的方法體,但是this關鍵字跟super關鍵字不能同時出現,而且只能在代碼的第一行。如果出現了this關鍵字,隱式三步就不會執行。
例如,分析下面的代碼及執行結果,已經用注釋標出了執行步驟Step 1–Step 7。
也就是說,當遞迴調用多個構造方法的時候,構造代碼塊只會在最後的(也即方法體第一行不是this語句的)那個構造方法執行之前執行!

public class Test {    public static int a = 0;    static {// Step 1        a = 10;        System.out.println("靜態代碼塊在執行a=" + a);    }    {// Step 4        a = 8;        System.out.println("非靜態代碼塊(構造代碼塊)在執行a=" + a);    }    public Test() {        this("調用帶參構造方法1,a=" + a); // Step 2        System.out.println("無參構造方法在執行a=" + a);// Step 7    }    public Test(String n) {        this(n, "調用帶參構造方法2,a=" + a); // Step 3        System.out.println("帶參構造方法1在執行a=" + a); // Step 6    }    public Test(String s1, String s2) {        System.out.println(s1 + ";" + s2);// Step 5    }    public static void main(String[] args) {        Test t = null;// JVM載入Test類,靜態代碼塊執行        System.out.println("下面new一個Test執行個體:");        t = new Test();    }}

執行結果:

靜態代碼塊在執行a=10下面new一個Test執行個體:非靜態代碼塊(構造代碼塊)在執行a=8調用帶參構造方法1,a=10;調用帶參構造方法2,a=10帶參構造方法1在執行a=8無參構造方法在執行a=8

http://bbs.csdn.net/topics/391001417

Java靜態代碼塊、構造代碼塊、構造方法的執行順序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.