java試題

題目:

         (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  構造函數

 

除了靜態的 都是父類的優先於子類加載,相同級別按照從上到下的順序 (靜態的只加載一次)。

同一個類相同級別:

 靜態變量 = 靜態代碼塊

成員變量 = 代碼塊

 

參考資料:

類裏面元素的加載順序

類加載詳解java初始化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章