class A {
static A a=new A('s',1);
A(char c, int i) { System.out.println("A(char, int)"+"c"+c+"i"+i);}
}函數
public class Ex8 extends A {
private char c;
private static int i;
static{
System.out.println("ssssssssssssss"+"i"+i);
}
static A v=new A('v',2);
A z; spa
{
System.out.println("ssssssssssssss"+"c"+c+"i"+i);
}
Ex8() {
super('z', 3);對象
z=new A ('w',1);
System.out.println("Ex8()");
}
Ex8(char a, int j) {
super(a, j);
c = a;
i = j;
System.out.println("Ex8(char,int)");
System.out.println("zzzzz"+"c"+c+"i"+i);
}
public static void main(String[] args) {
Ex8 ex1 = new Ex8();
Ex8 ex2 = new Ex8('b', 2);
}
}class
類的初始化第一步執行的是main方法,這時候有用main的類的加載了,先去找有沒有extends,若是有先執行父類的靜態的變量的初始化,再執行子類的靜態變量的初始化,若是有靜態代碼塊,也會一併執行 ,而後纔是執行new出來的對象,先去找父類的構造函數進行初始化,因爲初始化構造函數的時候必須先執行成員變量的初始化,因此先執行,而後是子類的變量
因此輸出結果是構造函數
A(char, int)csi1
ssssssssssssssi0
A(char, int)cvi2
A(char, int)czi3方法
A(char, int)cwi1
Ex8()
A(char, int)cbi2
ssssssssssssssc i0static
Ex8(char,int)
zzzzzcbi2vi