public class Test {
public static void main(String[] args) {
B b = new B();
b.f();
}
}
class A{
A(int i){
System.out.println("A("+i+")");
}
}
class B {
B(){
System.out.println("show B");
a3 = new A(33); //覆蓋後面賦值的句柄
}
void f() {
System.out.println("init f");
}
static {
System.out.println("show static");
}
A a1 = new A(1);
A a2 = new A(2);
A a3 = new A(3);
}
執行順序結果:
show static
A(1)
A(2)
A(3)
show B
A(33)
init f
———————————————————————————————————————————————————————
官方解釋:
初始化的順序是由變量在類內的定義順序決定的。即使變量定義大量遍佈於方法定義的中間,
那些變量仍會在調用任何方法之前得到初始化——甚至在構建器調用之前,static,永遠是在類初始化之前執行,包括類的變量列表
通俗來說久
類的初始化後,1.先執行static代碼塊,2.在執行類(全部)變量,3.執行構造函數,4執行調用方法,5.初始化方法中變量(局部)