直接上例子
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(55);
}
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();
}
}
执行结果如下:
Window(1)
Window(2)
Window(3)
House()
Window(55)
f()
分析:
House类中的有三个Window类的对象w1,w2,w3。根据通常的理解,应该是w1初始化,w2,w3都在构造方法的后面,为什么输出的顺序是不是这样的呢?那是因为在类的内部,即使变量定义分散在方法任何角落,它也会比方法先执行。假设w2,w3后执行,那么w3在构造方法中是没有声明的,编译都会通过不了。存在就是它的道理,有时候可以采用逆向思维,采用反证法来验证。