靜態屬性靜態程式碼塊載入順序
阿新 • • 發佈:2018-11-10
class A { private static String staticStr = getStaticStr(); private String str = getStr(); static { System.out.println("A的靜態塊"); } { System.out.println("A的例項塊"); } public A() { System.out.println("A的構造方法"); } private static String getStaticStr() { System.out.println("A的靜態屬性初始化"); return null; } private String getStr() { System.out.println("A的例項屬性初始化"); return null; } } class B extends A { private static String staticStr = getStaticStr(); private String str = getStr(); static { System.out.println("B的靜態塊"); } { System.out.println("B的例項塊"); } public B() { System.out.println("B的構造方法"); } private static String getStaticStr() { System.out.println("B的靜態屬性初始化"); return null; } private String getStr() { System.out.println("B的例項屬性初始化"); return null; } public static void main(String[] args) { new B(); new B(); } }
輸出結果是:
A的靜態屬性初始化
A的靜態塊
B的靜態屬性初始化
B的靜態塊
A的例項屬性初始化
A的例項塊
A的構造方法
B的例項屬性初始化
B的例項塊
B的構造方法
A的例項屬性初始化
A的例項塊
A的構造方法
B的例項屬性初始化
B的例項塊
B的構造方法
注意:
1.靜態物件不呼叫靜態塊。
2.靜態屬性類載入的時候開闢空間,賦預設值。
3.每次建立物件都是類初始化過程。
4.若未呼叫過靜態塊,則建立普通物件是先呼叫靜態塊,再呼叫普通程式碼塊,最後才呼叫構造方法。
5.若static程式碼有多個,JVM按照它們在類中出現的先後順序依次執行它們,每個靜態程式碼塊只會被執行一次。
參考:https://blog.csdn.net/qq_35505699/article/details/71951175