java 類屬性的加載順序(帶有繼承關系的)


工作有三年之久了,突然感覺帶有繼承關系、父子倆既有靜態變量又有成員變量的情況,變量的加載順序很容易混淆,今晚寫了個例子,總算是把關系搞清楚了

例子中,父類既有普遍的成員變量,也有static變量,也有static代碼塊,在父類的構造器前后都有static變量及普通變量,讓我們看看初始化子類的時候會發生什么吧

先提供完整代碼:

LoadSequence.java

public class LoadSequence {
    public static void main(String[] args) {
        new LsSon();
        
    }
}

class PrintObj {
    public PrintObj(String str) {
        System.out.println(str);
    }
}

class LsFather {
    static PrintObj po1 = new PrintObj("LsFather static new 1 ");

    PrintObj po2 = new PrintObj("LsFather new 2 ");
    
    static {
        System.out.println("LsFather static");
    }

    public LsFather() {
        System.out.println("LsFather()");
    }
}

class LsSon extends LsFather {
    static PrintObj po3 = new PrintObj("LsSon static new 3 ");

    PrintObj po4 = new PrintObj("LsSon new 4 ");

    static {
        System.out.println("LsSon static");
    }

    public LsSon() {
        System.out.println("LsSon()");
    }
    
    static PrintObj po5 = new PrintObj("LsSon static new 6 ");
    
    PrintObj po6 = new PrintObj("LsSon new 6 ");

}
View Code

 

執行結果如下:

LsFather static new 1
LsFather static
LsSon static new 3
LsSon static
LsSon static new 6
LsFather new 2
LsFather()
LsSon new 4
LsSon new 6
LsSon()

由於可知:

帶有繼承關系的,實例化子類時,加載順序如下:

父類static標識的代碼,按順序自上而下全部執行  ->  子類static標識的代碼,按順序自上而下全部執行

->父類成員變量加載 -> 父類構造函數 -> 子類成員變量加載 -> 子類構造函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM