2011-07-21 215 views
1

正在調用靜態Java方法(工廠類方法)創建該類的對象?Java靜態方法調用

我的意思是一個靜態方法返回一個值,假設數組的大小(數組類的變量)

我檢查代碼,但看不到調用之前該類的對象永遠不會實例靜態方法。 ?

public static boolean isFiveInstance() { 
    return _instances.size() == 5; 
} 

和_instances是類變量

private static ArrayList<LocalMediaPlayer> _instances; 

和正在創建和填充在建築工。

回答

3

不,static調用沒有實例化對象(因爲它們不需要)。

第一次引用一個類,包括靜態方法調用時,該類將被加載。由類加載器。

這就是靜態初始化進場:

static { 
    // do something 
} 

每當類(每一個classloader一次)

+0

所以初始化該塊被稱爲?當我通過調用類的靜態方法 Class.staticMEthod(); 這個靜態塊也被調用,對吧? 這個靜態塊在constructer中。 –

+0

當你第一次參考這個類時,就會調用這個塊。它被放置在構造函數 – Bozho

+0

之外,我想我明白了。首先,你是對的,它是在構造函數之外(我的錯誤)。而且,因爲我是通過調用像Class.StaticMethod()這樣的靜態方法引用**類的,所以它也在執行靜態塊。即使我沒有創建一個Class實例。 –

4

不,它不。這是創建靜態方法的關鍵。靜態方法不使用它們在其中定義的類的任何對象的實例變量,因此您在靜態方法內引用的所有內容也必須是靜態的。

這就是爲什麼你調用一個靜態方法類似Class.StaticMethod()代替:

new Class().StaticMethod(); 

new將實例化類,從而創建該對象的新實例。

2

不,調用靜態方法不會創建類的實例。這就是靜態方法與實例方法不同的地方。他們不需要它們所屬類的實例來實例化運行。