2012-11-13 32 views
0

在類Myclass中,類Help作爲對象加載,但之後再次加載到Help類中。是不是Help類加載兩次?這樣做的理由是什麼?編碼器爲什麼要加載一個類兩次?

例如:

public class Myclass { 
    int i; 
    Object help; 

    public Myclass() { 
     help = new Help(); /// help class loaded 
    } 

    private Object doSomething(int h) { 
     Help.getHelp(h); 
    } 
} 

幫助類:

public class Help(){ 
    Object returnhelp; 
    int h; 

    public Help() { 
     int h=3; 
    } 

    public Help getHelp(int y) { 
     return new Help(y); ///// Help class loaded again ???? 
    } 

    private add(int y) { 
     h=+y; 
     return h; 
    } 
} 
+5

當您執行'new Help()'時,類沒有被加載,它正在被實例化,這是一個很大的區別。 –

+3

doSomething錯過了一個'return'。 'getHelp'應該是'public static Help'。這將使'getHelp'成爲**工廠**方法。一般情況下,人們會決定這一個或另一個,使建設者是私人的。如果將工廠方法放在另一個類中,則可以完全隱藏實際的類並返回一個接口。所以你有選擇實施的自由。 –

+0

歡迎來到StackOverflow。我認爲你的問題已經得到解答。請[標記答案正確](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work),謝謝。 – m0skit0

回答

1

該類不是加載兩次,而是兩次實例化爲對象。

Here是Java教程的高級視圖。

1

Help類加載一次。但是,您可能正在創建更多實例。一個在Myclass構造函數中創建,另一個在調用Help.getHelp()方法時創建。

+0

爲什麼會這樣做?創建兩個實例? – Andre

5

首先,您將類加載與類實例化混淆在一起。

  • 類加載是當Java虛擬機將類代碼加載到內存中時。
  • 類實例化是當您創建該類的實例(對象)時。

此外,你的代碼不能因爲爲了做到這一點

Help.getHelp(h) 

getHelp(int)編譯必須是靜態的:

public static Help getHelp(int y) 

在這種情況下,你沒有實例化兩次。使用靜態方法爲給定類實例化對象是一種常見過程,它被稱爲factory

+2

'getHelp(int y)'方法中也存在編譯錯誤,因爲'Help'類沒有實現一個接受int參數的構造函數。 –

+0

是的,這個代碼實際上有很多錯誤。我試圖堅持這個問題:) – m0skit0

+0

我正要評論同樣的事情! ;-) 另外..我不知道什麼'對象returnhelp'在那裏做.. –

相關問題