Java的初始化過程

來源:互聯網
上載者:User

標籤:成員變數   public   ext   java   過程   程式   color   類的初始化順序   sys   

在刷題的過程中,時常會碰到關於Java中的類的初始化順序的問題。

總結如下,便於以後複習:

初始化過程:

  1. 首先,初始化父類中的靜態成員變數和靜態代碼塊,按照在程式中出現的順序初始化; 
  2. 然後,初始化子類中的靜態成員變數和靜態代碼塊,按照在程式中出現的順序初始化; 
  3. 其次,初始化父類的普通成員變數和代碼塊,再執行父類的構造方法;
  4. 最後,初始化子類的普通成員變數和代碼塊,再執行子類的構造方法;

舉例如下:

class C {    C() {        System.out.print("C");    }} class A {    C c = new C();     A() {        this("A");        System.out.print("A");    }     A(String s) {        System.out.print(s);    }} class Test extends A {    Test() {        super("B");        System.out.print("B");    }     public static void main(String[] args) {        new Test();    }}

在上面的程式中,new了一個新類Test後,其初始化過程如下:

  1. 調用構造方法來初始化該子物件,但是因為Test繼承自類A,所以需要先調用A的構造方法;
  2. 在Test的構造方法中通過super("B") 顯式調用了父類的帶參構造方法,將不再調用其無參構造方法;
  3. 再執行A的構造方法之前,需要先對其成員變數進行初始化,因此會執行C的構造方法。
  4. 由此可知,最終的調用順序為:類C的無參構造——>類A的帶參構造——>類Test的構造方法的其餘部分。

因此最後輸出的結果為:

CBB

 

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.