關於類中靜態、非靜態、構造方法的執行順序
阿新 • • 發佈:2018-12-05
幾大原則
一、靜態成員變數(Static)
1、靜態成員變數為類變數,所有物件共享同一記憶體空間
2、靜態成員變數的宣告和定義僅在首次載入類時執行一次
3、首次載入類時首先對所有靜態成員變數根據型別預設賦初值,然後再對有右值的附右值
二、靜態初始塊
1、靜態初始化塊僅在首次載入類時執行一次
······多個靜態成員變數與靜態始化快參照出現順序先後執行······
三、動態成員變數
1、動態成員變數定義在每次例項化物件時在建構函式之前執行
四、動態初始化塊
1、動態初始化塊在每次例項化物件時在建構函式之前執行
······多個動態成員變數與動態初始化塊參照出現順序先後執行······
總結:總的來說,在不涉及繼承的前提下,當首次載入類時,按照如下順序執行
1、按照出現順序先後執行靜態成員變數定義與靜態初始化塊
2、按照出現順序先後執行動態成員變數定義與動態初始化塊
3、執行建構函式
再次例項化物件時只執行第2、3步即可
············成員變數與定義與初始化塊先於建構函式執行·········
五、當涉及到繼承時,按照如下順序執行
1、執行父類的靜態成員變數定義與靜態初始化塊,執行子類的靜態成員變數定義與靜態初始化塊
2、執行父類的非靜態成員變數定義與動態初始化塊,執行父類構造方法
3、執行子類的非靜態成員變數定義與動態初始化塊,執行子類構造方法
另:父類構造方法中用到的方法如果已被子類重寫,那麼在構造子類物件時在呼叫父類建構函式中使用子類重寫的方法