题目:
(D)
指出下面程序的运行结果:()
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[] args) {
new B();
new B();
}
}
A abb
B 1abb
C a12b2b
D 1a2b2b
运行结果:
小结:
优先级层次(相同优先级的属性按程序先后顺序初始化):
第一级:静态属性
1. 父类: 静态成员变量=静态代码块
2. 子类: 静态成员变量=静态代码块
第二级:非静态属性
1. 父类:
1.1 成员变量 = 代码块
1.2 构造函数
2. 子类:
2.1 成员变量 = 代码块
2.2 构造函数
除了静态的 都是父类的优先于子类加载,相同级别按照从上到下的顺序 (静态的只加载一次)。
同一个类相同级别:
静态变量 = 静态代码块
成员变量 = 代码块
参考资料: