书中原文:在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化
public class Test01 {
public static void main(String[] args) {
House house = new House();
}
}
class Window {
public Window(int marker) {
System.out.println("Window:" + marker);
}
}
class House {
Window w1 = new Window(1);
public House() {
System.out.println("House()");
}
Window w2 = new Window(2);
}
执行结果:
Window:1
Window:2
House()
我们知道,在类中有两种全局变量(普通变量和静态变量),那么它们的初始化有什么区别呢?
public class Test01 {
public static void main(String[] args) {
House h1 = new House();
House h2 = new House();
}
}
class Window {
public Window(int marker) {
System.out.println("Window:" + marker);
}
}
class House {
Window w1 = new Window(1);
public House() {
System.out.println("House()");
w1 = new Window(11);
}
Window w2 = new Window(2);
static Window w3 = new Window(3);
}
执行结果:
Window:3
Window:1
Window:2
House()
Window:11
Window:1
Window:2
House()
Window:11
从结果不难发现:
- 静态变量优先于普通变量的初始化
- 静态变量只会初始化一次(不管创建多少对象),而普通变量每创建一个对象就会初始化一次