Java类的初始化顺序
Java类的初始化顺序
先初始化类中的非static成员,再初始化static成员。两种成员都按照定义的顺序进行初始化。
对于static成员,无论定义了多少个对象,其中的static成员只会初始化一次。
类中的成员初始化完毕之后,开始执行类的构造器。
类中的方法是最后被初始化的。
public class StaticInitialization {public static void main(String[] args) {System.out.println("main creating new Cupboard()");Cupboard cupboard=new Cupboard();System.out.println("main creating new Cupboard()");new Cupboard();}//定义两个静态的成员,先于main函数初始化static Table table = new Table();static Cupboard cupboard = new Cupboard();
}class Bowl {Bowl(int marker){System.out.println("Bowl(" + marker + ")");}void f1(int marker) {System.out.println("f1(" + marker + ")");}
}class Table {static Bowl bowl1=new Bowl(1);Table() {System.out.println("Table()");bowl2.f1(1);}void f2(int marker) {System.out.println("f2(" + marker + ")");}static Bowl bowl2=new Bowl(2);
}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);
}
最后输出:
Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
main creating new Cupboard()
Bowl(3)
Cupboard()
f1(2)
main creating new Cupboard()
Bowl(3)
Cupboard()
f1(2)