Java類完整的構造執行順序

2021-04-26 06:05:51 字數 1075 閱讀 6145

如果父類有靜態成員賦值或者靜態初始化塊,執行靜態成員賦值和靜態初始化塊

如果類有靜態成員賦值或者靜態初始化塊,執行靜態成員賦值和靜態初始化塊

將類的成員賦予初值(原始型別的成員的值為規定值,例如int型為0,float型為0.0f,boolean型為false;物件型別的初始值為null)

如果構造方法中存在this()呼叫(可以是其它帶引數的this()呼叫)則執行之,執行完畢後進入第7步繼續執行,如果沒有this呼叫則進行下一步。(這個有可能存在遞迴呼叫其它的構造方法)

執行顯式的super()呼叫(可以是其它帶引數的super()呼叫)或者隱式的super()呼叫(預設構造方法),此步驟又進入乙個父類的構造過程並一直上推至object物件的構造。

執行類申明中的成員賦值和初始化塊。

執行構造方法中的其它語句。

其中第4步是比較麻煩的,因為this呼叫實際上會呼叫類的另外乙個構造方法,最終應該是執行類的某個構造方法,它可能會顯示的呼叫super,但是無論是否呼叫super,最終都是執行super的,也就是父類的構造方法並一直這樣遞迴到object,所以在子類和父類的構造中,首先構造或者說執行的是父類的構造,但是它是由子類的構造方法呼叫的,先於構造方法的方法體裡面的內容,這個是由編譯器決定的。所以我感覺簡單直觀一些的順序表述應該是:

如果父類有靜態成員賦值或者靜態初始化塊,執行靜態成員賦值和靜態初始化塊

如果類有靜態成員賦值或者靜態初始化塊,執行靜態成員賦值和靜態初始化塊

將類的成員賦予初值(原始型別的成員的值為規定值,例如int型為0,float型為0.0f,boolean型為false;物件型別的初始值為null)

執行構造方法,並可能遞迴呼叫this(),最終先執行父類的構造方法並一直遞迴到object的構造方法的執行

父類的構造方法執行完成後,執行類申明中的成員賦值和初始化塊。

執行構造方法中的其它語句。

最終的簡化順序版本是:

父類的靜態成員賦值和靜態塊

子類的靜態成員和靜態塊

父類的構造方法

父類的成員賦值和初始化塊

父類的構造方法中的其它語句

子類的成員賦值和初始化塊

子類的構造方法中的其它語句

java類構造物件的構造順序

我們先來看乙個例項 class example class bigexample extends example class staticitem class privateitem public class test 結果是這樣的 this is staticitem this is privat...

Java繼承構造執行順序

package test public class father public father package test public class son extends father public son public son int s public static void main string...

java類執行順序

如果父類有靜態成員賦值或者靜態初始化塊,執行靜態成員賦值和靜態初始化塊 如果類有靜態成員賦值或者靜態初始化塊,執行靜態成員賦值和靜態初始化塊 將類的成員賦予初值 原始型別的成員的值為規定值,例如int型為0,float型為0.0f,boolean型為false 物件型別的初始值為null 如果構造方...