最後運行的結果是什麼?
class Father {
private int i = test();
private static int j = method();
static {
System.out.println("(1)");
}
Father() {
System.out.println("(2)");
}
{
System.out.println("(3)");
}
public int test() {
System.out.println("(4)");
return 1;
}
public static int method() {
System.out.println("(5)");
return 1;
}
}
class TestInitialization extends Father {
private int i = test();
private static int j = method();
static {
System.out.println("(6)");
}
TestInitialization() {
System.out.println("(7)");
}
{
System.out.println("(8)");
}
public int test() {
System.out.println("(9)");
return 1;
}
public static int method(){
System.out.println("(10)");
return 1;
}
public static void main(String[] args) {
TestInitialization t1 = new TestInitialization();
System.out.println();
TestInitialization t2 = new TestInitialization();
}
}
。
。
。
。
。
。
。
。
。
。
。
。
答案:
(5)(1)(10)(6)(9)(3)(2)(9)(8)(7)
(9)(3)(2)(9)(8)(7)
注意:
一個子類要初始化需要先初始化父類;
一個類的初始化就是執行<clinit>()方法;<clinit>()方法由 靜態變量顯示賦值代碼和靜態代碼塊組成;<clinit>()只執行一次。
this在構造器(或<init>)它表示的是正在創建的對象,因爲這裏是在創建子類對象,所以test()執行的是子類重寫的代碼,所以第五個數字不是(4)而是(9)