在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之中,它们仍旧会在**任何方法(包括构造器)**被调用之前得到初始化。
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这个引用被初始化了两次,一次在调用构造器前,一次在调用期间。第一次引用的对象将被丢弃,并作为垃圾回收。