指出下面程序的运行结果:
class A {
static {
System.out.print("1");
}
public A() {
System.out.print("2");
}
}
class B extends A {
static {
System.out.print("a");
}
public B() {
System.out.print("b");
}
}
public class Hello {
public static void main(String[] ars) {
A ab = new B();
ab = new B();
}
}
参考解答
输出结果为1a2b2b
分析
执行顺序为:
- 类加载 (仅1次)
- 初始化静态成员变量,执行静态代码块,从父类到子类(仅1次)
- 父类的成员变量空间分配,初始化成员变量,执行初始化代码块,构造方法
- 子类的成员变量空间分配,初始化成员变量,执行初始化代码块,构造方法