Java對象初始化過程各部分加載順序

一.Java對象初始化順序
 0. 父類靜態成員變量
 1. 父類靜態代碼塊
 2. 子類靜態成員變量
 3. 子類靜態代碼塊
 4. 父類成員變量
 5. 父類非靜態代碼塊
 6. 父類構造器
 7. 子類成員變量
 8. 子類非靜態代碼塊
 9. 子類構造器
二.代碼實現
 public class InitializeSon extends InitializeFather {
    private static int si1 = getStaticVariable();
    private int mi1 = getMemberVariable();

    private int getMemberVariable() {
        System.out.println("Son Member variable");
        return 5;
    }

    private static int getStaticVariable() {
        System.out.println("Son Static variable");
        return 4;
    }

    static {
        System.out.println("Son Static block");
    }

    {
        System.out.println("Son Non static block");
    }

    InitializeSon() {
        System.out.println("Son Constructor");
    }

    public static void main(String[] args) {
        InitializeSon initializeSon = new InitializeSon();
//        InitializeFather initializeFather = new InitializeFather();
//        InitializeGrandfather initializeGrandfather = new InitializeGrandfather();
    }
}

class InitializeFather extends InitializeGrandfather {
    private static int si2 = getStaticVariable();
    private int mi2 = getMemberVariable();

    private int getMemberVariable() {
        System.out.println("Father Member variable");
        return 5;
    }

    private static int getStaticVariable() {
        System.out.println("Father Static variable");
        return 4;
    }

    static {
        System.out.println("Father Static block");
    }

    {
        System.out.println("Father Non static block");
    }

    InitializeFather() {
        System.out.println("Father Constructor");
    }
}

class InitializeGrandfather {
    private static int si3 = getStaticVariable();
    private int mi3 = getMemberVariable();

    private int getMemberVariable() {
        System.out.println("Grandfather Member variable");
        return 5;
    }

    private static int getStaticVariable() {
        System.out.println("Grandfather Static variable");
        return 4;
    }

    static {
        System.out.println("Grandfather Static block");
    }

    {
        System.out.println("Grandfather Non static block");
    }

    InitializeGrandfather() {
        System.out.println("Grandfather Constructor");
    }
}
三.運行結果
Grandfather Static variable
Grandfather Static block
Father Static variable
Father Static block
Son Static variable
Son Static block
Grandfather Member variable
Grandfather Non static block
Grandfather Constructor
Father Member variable
Father Non static block
Father Constructor
Son Member variable
Son Non static block
Son Constructor
四.總結
 Java對象在初始化過程當中各成員的加載順序特點如下:
   1.先父類,後子類
   2.先靜態,後成員
   3.先成員變量,後代碼塊,末尾再接構造器
發佈了30 篇原創文章 · 獲贊 18 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章