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;{
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); } }类的初始化第一步执行的是main方法,这时候有用main的类的加载了,先去找有没有extends,如果有先执行父类的静态的变量的初始化,再执行子类的静态变量的初始化,如果有静态代码块,也会一并执行 ,然后才是执行new出来的对象,先去找父类的构造函数进行初始化,由于初始化构造函数的时候必须先执行成员变量的初始化,所以先执行,然后是子类的
所以输出结果是
A(char, int)csi1
ssssssssssssssi0 A(char, int)cvi2 A(char, int)czi3A(char, int)cwi1
Ex8() A(char, int)cbi2 ssssssssssssssc i0Ex8(char,int)
zzzzzcbi2