Java-類初始化順序

普通類初始化順序

靜態變量
靜態代碼塊
普通變量
普通代碼塊
構造函數

public class Demo {
    // 實例變量
    String string = getString();
    // 靜態變量
    static String staticString = getStaticString();
    // 普通方法塊
    {
        System.out.println("普通 方法塊 執行");
    }
    // 靜態代碼塊
    static {
        System.out.println("靜態 代碼塊 執行");
    }
    // 構造方法
    Demo(){
        System.out.println("類構造 方法 執行");
    }
    // 用來初始化靜態變量
    public static String getStaticString(){
        System.out.println("靜態 變量 初始化");
        return "靜態變量";
    }
    // 用來初始化實例變量
    public static String getString(){
        System.out.println("實例 變量 初始化");
        return "實例變量";
    }

    public static void main(String[] args) {
        new Demo();
    }
}

輸出的結果:

靜態 變量 初始化
靜態 代碼塊 執行
實例 變量 初始化
普通 方法塊 執行
類構造 方法 執行

子類(繼承父類)初始化順序

父類靜態變量
父類靜態代碼塊
子類靜態變量
子類靜態代碼塊
父類普通變量
父類普通代碼塊
父類構造函數
子類普通變量
子類普通代碼塊
子類構造函數

子類(繼承抽象類和實現接口)初始化順序

接口靜態變量
抽象類靜態變量
抽象類靜態代碼塊
子類靜態變量
子類靜態代碼塊
抽象類普通變量
抽象類普通代碼塊
抽象類構造函數
子類普通變量
子類普通代碼塊
子類構造函數

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