題目:
(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 構造函數
除了靜態的 都是父類的優先於子類加載,相同級別按照從上到下的順序 (靜態的只加載一次)。
同一個類相同級別:
靜態變量 = 靜態代碼塊
成員變量 = 代碼塊
參考資料: