1. 程式人生 > >java 構造器初始化順序

java 構造器初始化順序

在類的內部,變數定義的先後順序決定了初始化的順序。即使變數定義散佈於方法定義之中,它們仍舊會在**任何方法(包括構造器)**被呼叫之前得到初始化。

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

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 Main { public static void main(String[] args) { House h = new House(); h.f(); } }

output

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

w3這個引用被初始化了兩次,一次在呼叫構造器前,一次在呼叫期間。第一次引用的物件將被丟棄,並作為垃圾回收。