static,建構函式,子類,父類執行順序

2021-05-21 20:22:50 字數 1057 閱讀 5821

幾天前去華為筆試,遇到了 static變數,建構函式以及父類、子類構造和static執行順序的考題,

結果就瞎矇了,也不對。前幾天想起來,就實際寫了**測試一下,結論如下:

/**1 每個類初始化時,會先初始化它的static再執行構造方法,

當static已經執行過後,該類的新的例項不會再執行static

2 該類如果繼承了某個類則父類的static會先初始化。

3 某個類即便有static main方法,並且該類作為執行類,

在執行main方法的過程中,只要不涉及到該類,則static都不會執行---->修正:執行main方法的第一行**前,會執行該類中定義的static**塊和初始化其中的static變數,按照定義順序來執行初始化.

* * 因此,可以得到如下順序:

* 1 父類static 變數/**塊 初始化(即使父類static是private的也會初始化,只會初始化一次)

* 2 子類static 變數/**塊 初始化

* 3 父類構造方法

* 4 子類構造方法

* static變數和static**塊的初始化順序按照書寫的先後順序初始化

* * 子類可以覆蓋父類的方法,覆蓋的時候可以擴大控制符的範圍,而不能縮小範圍【如protected-->public可以,protected-->friendly不可】

* *

* * 關於子類和父類構造方法引數等不一致時問題

* 1 父類建構函式無引數,子類構造也無引數,且子類該建構函式中未呼叫或者顯式採用super()方式呼叫時,

*   父類無參建構函式和子類無參建構函式都會執行

* 2 如果子類無參建構函式中,顯式呼叫父類有參建構函式,則父類無參建構函式不會被執行

* * 由此可以知道:

* 子類初始化時,執行子類建構函式(不管是有參還是無參的子建構函式)之前,缺省會首先執行父類無引數建構函式

* 但是如果在子類建構函式(不管是有參還是無參的子建構函式)中,顯式呼叫父類有參建構函式,

則會執行父類被顯式呼叫的有參建構函式而不會執行父類無參建構函式。

* /

static,建構函式,子類,父類執行順序

幾天前去華為筆試,遇到了 static變數,建構函式以及父類 子類構造和static執行順序的考題,結果就瞎矇了,也不對。前幾天想起來,就實際寫了 測試一下,結論如下 1 每個類初始化時,會先初始化它的static再執行構造方法,當static已經執行過後,該類的新的例項不會再執行static 2 ...

父類建構函式 子類建構函式

1.子類可以通過super關鍵字來顯式地呼叫父類的建構函式。2.當父類沒有提供無引數的建構函式時,子類也不可以有無參建構函式,且子類的建構函式中必須顯式的呼叫父類的建構函式 3.如果父類提供了無引數的建構函式,此時子類的建構函式就可以不顯式的呼叫父類的建構函式,預設呼叫父類的無參建構函式。4.只要父...

父類建構函式 子類建構函式

1.子類可以通過super關鍵字來顯式地呼叫父類的建構函式。2.當父類沒有提供無引數的建構函式時,子類也不可以有無參建構函式,且子類的建構函式中必須顯式的呼叫父類的建構函式 3.如果父類提供了無引數的建構函式,此時子類的建構函式就可以不顯式的呼叫父類的建構函式,預設呼叫父類的無參建構函式。4.只要父...