先說結論:
外部類初次載入,會初始化靜態變數、靜態**塊、靜態方法,但不會載入內部類和靜態內部類。
例項化外部類,呼叫外部類的靜態方法、靜態變數,則外部類必須先進行載入,但只載入一次。
直接呼叫靜態內部類時,外部類不會載入。
再看**:
外部類及內部類:
public class student
public student()
static class innerstaticclass
class innerclass
}public static void timeelapsed()
}public static void outerstaticmethod()
}
測試類:
public class test
private static void timeelapsed()
}}
結果輸出:
外部類靜態方法執行了
可以看到,呼叫靜態內部類的變數時,外部類並沒有載入。時間與外部類是否載入以及載入時間無關。
而在呼叫外部類靜態變數時,外部類靜態塊載入了,並且和靜態變數一起,隨著外部類的載入而初始化了。
至於訪問非靜態類的變數,首先要獲得外部類的乙個例項,所以這時候外部類才載入建構函式,故最晚。
參考文章:
靜態內部類載入時機
這兩天在學習設計模式,其中單例模式有種實現是通過靜態內部類方式實現,有些不可思議,故在此做個小實驗驗證一下靜態內部類的載入時機 public class teststatic public teststatic 內部類 class innerclass 靜態內部類 static class stat...
內部類 靜態內部類 延遲載入
外部類載入順序 1 外部類初次載入,會初始化靜態變數 靜態 塊 靜態方法,但不會載入內部類和靜態內部類。2 例項化外部類,呼叫外部類的靜態方法 靜態變數,則外部類必須先進行載入,但只載入一次。3 直接呼叫靜態內部類時,外部類不會載入。內部類載入順序 在初次呼叫的時候載入,且只載入一次 package...
Java內部類 靜態內部類
靜態內部類是外部類的靜態成員,不依賴於外部類的物件而存在,因此在外部類外面建立靜內部類物件時不需要首先建立外部類的物件 靜態內部類也可以稱為靜態巢狀類或頂級巢狀類。靜態內部類與外部類物件之間不存在著對成員的共享關係,靜態內部類其實已經脫離了外部類的控制 static關鍵字只是說明其在建立物件的時候不...