構造器初始化__構造器

來源:互聯網
上載者:User

大家看一下這個例子:

public class Window {
Window(int marker) {
System.out.println("Window(" + marker + ")");
}
}

public class House {

Window w1 = new Window(1);
House() {
System.out.println("House()");
w3 = new Window(33);
}
Window w2 = new Window(2);
void f() {
System.out.println("f()");
}
Window w3 = new Window(3);
}

public class OrderOfInitialization {

public static void main(String[] args) {
House h = new House();
h.f();
}

}

想一想會輸出什麼樣的結果。

output:

Window(1)
Window(2)
Window(3)
House()
Window(33)
f()

看到了什麼。首先是從main入手,建立一個House對象,然後初始化開始,進入House類中,先初始化誰呢。首先看到了Window類,並建立了一個Window對象,那麼是不是要先初始化Window呢。從輸出結果來看,似乎是這樣的,但接下來的輸出結果一起將Window(2)和Window(3)也輸出來了,沒按套路出牌啊,應該先輸出House()啊,怎麼Window(2)和Window(3)比House()先輸出來了呢。後來又做了個實驗:將Window w1 = new Window(1)這段代碼移動到了House()構造方法的後面,輸出結果如下:

Window(1)
Window(2)
Window(3)
House()
Window(33)
f()

恩。一樣的。恩,是一樣的,怎麼回事兒呢。再做個實驗,再建立一個類Door吧,代碼如下:

public class Door {

Door() {
System.out.println("Door()");
}
}

public class House {

House() {
System.out.println("House()");
w3 = new Window(33);
}
Window w1 = new Window(1);
Window w2 = new Window(2);
void f() {
System.out.println("f()");
}
Window w3 = new Window(3);
Door door = new Door();
}

看看輸出結果:

Window(1)
Window(2)
Window(3)
Door()
House()
Window(33)
f()

看出來大概的意思了吧,不管誰先誰後,只要我House()這個建構函式裡面new了對象,那麼就先去初始化這些new的對象,恩,對的,是這麼個意思,問題到這裡就差不多解決了。希望能夠對大家起到協助。

聯繫我們

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