1. 程式人生 > >靜態內部類與非靜態內部類

靜態內部類與非靜態內部類

靜態內部類: 靜態內部類也是定義在另一個類裡面的類,只不過在類的前面多了一個關鍵字static。

非靜態內部類不能有靜態成員:

對於java類載入順序我們知道,首先載入類,執行static變數初始化,接下來執行物件的建立,如果我們要執行程式碼中的變數i初始化,
那麼必須先執行載入OuterClass,再載入Innerclass,最後初始化靜態變數i,問題就出在載入Innerclass上面,我們可以把InnerClass看成OuterClass的非靜態成員,它的初始化必須在外部類物件建立後以後進行,要載入InnerClass必須在例項化OuterClass之後完成,java虛擬機器要求所有的靜態變數必須在物件建立之前完成,這樣便產生了矛盾。

靜態內部類可以有靜態成員:

我們可以把靜態內部類作為外部類OuterClass的一個靜態成員,在執行類載入過程中,靜態內部類在載入OuterClass後會進行初始化,同樣的原理,靜態內部類的靜態成員也將被初始化,進行記憶體的分配,注意到,這時無論是內部類還是外部類,物件都沒有例項化,這也說明了非靜態內部類為什麼不能有靜態成員的原因