day10 類成員載入順序

2021-10-06 07:52:26 字數 1858 閱讀 6847

面試的時候遇到了這樣乙個問題:

class

apublica(

)publica(

int n)

}class

bextends

apublicb(

)publicb(

int n)

}public

class

classload

}

如上**,當呼叫了子類b的有參構造時,父類的構造器先執行肯定是確定無疑,但是是執行哪個構造器呢?

執行結果如下:

執行結果中可以看到,當呼叫了子類b的有參構造時,父類a依然是執行了無參構造,也就是說,如果子類構造器中未顯式指定父類構造器,那麼將會預設執行父類的無參構造,此時,如果你過載了乙個父類的有參構造而沒有指定無參構造,那麼編譯將不會通過!!

父類的靜態字段——>父類靜態**塊——>子類靜態字段——>子類靜態**塊——>父類成員變數(非靜態字段)——>父類非靜態**塊——>父類(無參)構造器——>子類成員變數——>子類非靜態**塊——>子類構造器

class

apublica(

)}public

class

bextends

apublic

static

void

main

(string[

] args)

}答案:astaticab

classa1}

public

class

b1extends

a1public

static

void

main

(string[

] args)

}答案:astaticab

class

a2private

static a2 a =

newa2()

;static

}public

class

b2extends

a2public

static

void

main

(string[

] args)

}答案:

a1a gouzhaostatic0000

a1a gouzhaob

main方法是乙個特殊的方法,在程式開始執行時,系統會找到main方法所在的那個class檔案,然後把main方法的自**裝入記憶體,裝入的過程其實就是初識化這個類的過程,初識化成員變數,初始化static變數,初始化static塊,載入這個類(初始化)過程中如果不在執行的方法中new物件的話是不會執行其對應的構造方法和構造塊的,但是這個題在初始化成員變數時就new物件了所以執行結果為那樣。在main方法中執行new b2時又去執行了父類a2的構造**塊和無參構造方法。

day10作業常用類

一 基礎案例 1 訓練案例1 1.1 訓練描述 陣列排序 一 需求說明 定義乙個陣列,陣列中元素為 將陣列中的元素按照從小到大的順序進行排序。1.2 操作步驟描述 1.建立乙個一維陣列,陣列內容為。2.對陣列中元素按照從小到大的順序進行排序。3.將排完序的陣列進行列印。public class te...

python入門day10(迴圈 類)

一 我們先觀察下面兩幅圖的 看看他們之間有什麼不同之處,有什麼相似之處。經過仔細的觀察,我們可以發現,兩幅圖的差別就在於是否含有eval 函式,含有eval 函式的 會將我們輸入的數字變成數字直接進行計算 不含有eval 的 在做二者求和的時候只是簡單的將兩個字串進行了拼接,並不能完成我們預期的相加...

python的類與物件(day10)

定義類 class classname 類的幫助資訊 statement 在定義類時,如果沒有想好類的功能時,可用pass語句代替。建立類的例項 classname parameterlist classname 為必選引數,用於指定具體的類。後者為可選引數。init 該方法必須包含乙個self引數...