程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 構造器初始化

構造器初始化

編輯:關於C

大家看一下這個例子:

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的對象,恩,對的,是這麼個意思,問題到這裡就差不多解決了。希望能夠對大家起到幫助。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved