1、在类的内部,变量定义的先后顺序决定了初始化的顺序,变量会在任何方法(包括构造器)被调用之前得到初始化,而对于静态变量,会首先初始化。
class Bowl {
Bowl(int marker) {
System.out.println("Bowl(" + marker + ")");
}
void f1(int marker) {
System.out.println("f1(" + marker + ")");
}
}
class Cupboard {
Bowl bowl3 = new Bowl(3);
static Bowl bowl4 = new Bowl(4);
Cupboard() {
System.out.println("Cupboard()");
bowl4.f1(2);
}
void f3(int marker) {
System.out.println("f3(" + marker + ")");
}
static Bowl bowl5 = new Bowl(5);
}
public class StaticInitialization {
public static void main(String[] args) {
System.out.println("Creating new Cupboard() in main");
}
static Cupboard cupboard = new Cupboard();
}
/*outout如下:
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
Creating new Cupboard() in main
*/
//运行以上代码,要执行main方法,则必须先加载StaticInitialization.java类,
而在StaticInitialization.java类中定义了静态变量cupboard,则会先初始化Cupboard类,而Cupboard类中包含静态对象Bowl4、Bowl5,则会先加载Bowl类,输出Bowl(4)
Bowl(5) ,而Cupboard类中还定义了非静态变量bowl3,则输出Bowl(3),至此Cupboard中的变量初始化完毕,初始化其构造方法,输出Cupboard()
f1(2),至此StaticInitialization.java类中定义的静态变量cupboard所涉及到的内容初始化完毕,继续执行main方法中的内容,输出Creating new Cupboard() in main。