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