圖文詳解Java中class的初始化次序。本站提示廣大學習愛好者:(圖文詳解Java中class的初始化次序)文章只能為提供參考,不一定能成為您想要的結果。以下是圖文詳解Java中class的初始化次序正文
class的裝載
在講class的初始化之前,我們來說解下class的裝載次序。
以下摘自《Thinking in Java 4》
因為Java 中的一切器械都是對象,所以很多運動
變得加倍簡略,這個成績就是個中的一例。正以下一章會講到的那樣,每一個對象的代碼都存在於自力的文件中。除非真的須要代碼,不然誰人文件是不會載入的。平日,我們可以為除非誰人類的一個對象結構終了,不然代碼不會真的載入。因為static 辦法存在一些纖細的歧義,所以也能以為“類代碼在初次應用的時刻載入”。
初次應用的處所也是static 初始化產生的處所。裝載的時刻,一切static 對象和static 代碼塊都邑依照原來的次序初始化(亦即它們在類界說代碼裡寫入的次序)。固然,static 數據只會初始化一次。
扼要的說就是,在類有繼續關系時,類加載器上溯外型,停止相干類的加載任務。
好比:
Class B extends Class A 當我們new B()時,類加載器主動加載A的代碼
class的初始化次序
平日是以下如許的初始化次序:
(static對象和static代碼塊,根據他們的次序停止初始化)>成員變量>結構函數
測試代碼
public class ClassInit { /** * @Title: main * @Description: 類初始化次序測試 * @param: @param args * @return: void * @throws */ public static void main(String[] args) { // TODO Auto-generated method stub new B(); } } class A { static{ System.out.println("A的static代碼塊..."); } public String s1 = prtString("A的成員變量..."); public static String s2 = prtString("A的static變量..."); public A(){ System.out.println("A的結構函數..."); } public static String prtString(String str) { System.out.println(str); return null; } } class B extends A{ public String ss1 = prtString("B的成員變量..."); public static String ss2 = prtString("B的static變量..."); public B(){ System.out.println("B的結構函數..."); } private static A a = new A(); static{ System.out.println("B的static代碼塊..."); } { System.out.println("代碼塊..."); } }
測試成果
A的static代碼塊...
A的static變量...
B的static變量...
A的成員變量...
A的結構函數...
B的static代碼塊...
A的成員變量...
A的結構函數...
B的成員變量...
代碼塊...
B的結構函數...
總結
以上就是Java中class的初始化次序的全體內容,願望對年夜家應用Java能有所贊助。