Java對象建立階段的代碼調用順序

來源:互聯網
上載者:User

標籤:style   blog   color   java   strong   ar   div   代碼   

在建立階段系統通過下面的幾個步驟來完成對象的建立過程

  • 為對象分配儲存空間
  • 開始構造對象
  • 從超類到子類對static成員進行初始化
  • 超類成員變數按順序初始化,遞迴調用超類的構造方法
  • 子類成員變數按順序初始化,子類構造方法調用

本文重點示範第三步到第五步:

Grandpa類

 1 package com.xinye.test; 2  3 public class Grandpa { 4     { 5         System.out.println("執行Grandpa的普通塊"); 6     } 7     static { 8         System.out.println("執行Grandpa的靜態快"); 9     }10     public Grandpa(){11         System.out.println("執行Parent的構造方法");12     }13     static{14         System.out.println("執行Grandpa的靜態快222222");15     }16     {17         System.out.println("執行Grandpa的普通快222222");18     }19 }

Parent類

 1 package com.xinye.test; 2  3 public class Parent extends Grandpa{ 4     protected int a = 111; 5     { 6         System.out.println("執行Parent的普通塊"); 7     } 8     static { 9         System.out.println("執行Parent的靜態快");10     }11     public Parent(){12         System.out.println("執行Parent的構造方法");13     }14     public Parent(int a){15         this.a = a ;16         System.out.println("執行Parent的構造方法:InitParent(int a)");17     }18     static{19         System.out.println("執行Parent的靜態快222222");20     }21     {22         System.out.println("執行Parent的普通快222222");23     }24 }

Child類

 1 package com.xinye.test; 2  3 public class Child extends Parent { 4     { 5         System.out.println("執行Child的普通塊"); 6     } 7     static { 8         System.out.println("執行Child的靜態快"); 9     }10     public Child(){11         super(222);12         System.out.println("a = " + a);13         System.out.println("執行Child的構造方法");14     }15     static{16         System.out.println("執行Child的靜態快222222");17     }18     {19         System.out.println("執行Child的普通快222222");20     }21 }

測試類別

 1 package com.xinye.test; 2  3 public class Test { 4  5     public static void main(String[] args) { 6         /** 7          *  8          *  第一步: 9          *      Grandpa如果有靜態塊,按照Grandpa的靜態塊聲明順序依次執行10          *      Parent中如果有靜態塊,按照Parent中的靜態塊聲明順序依次執行11          *      Child中如果有靜態塊,按照Child中的靜態塊聲明順序依次執行12          *  第二部:13          *      如果Grandpa中有普通塊,按照Grandpa的普通塊聲明順序依次執行14          *          執行完畢後,執行被調用的構造方法(如果Parent調用了Grandpa中的特定構造;如果沒有則調用預設構造)15          *      如果Parent中有普通塊,按照Parent的普通塊的聲明順序依次執行16          *          執行完畢後,執行被調用的構造方法(如果Child調用了Parent的特定構造;如果沒有則調用預設構造)17          *         如果Child中有普通塊,按照Child的普通塊的聲明順序依次執行18          *             執行完畢後,執行被用戶端調用的特定構造方法19          */20         21         new Child();22     }23 }

執行結果

 1 執行Grandpa的靜態快 2 執行Grandpa的靜態快222222 3 執行Parent的靜態快 4 執行Parent的靜態快222222 5 執行Child的靜態快 6 執行Child的靜態快222222 7 執行Grandpa的普通塊 8 執行Grandpa的普通快222222 9 執行Parent的構造方法10 執行Parent的普通塊11 執行Parent的普通快22222212 執行Parent的構造方法:InitParent(int a)13 執行Child的普通塊14 執行Child的普通快22222215 a = 22216 執行Child的構造方法

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.