2016-03-07 45 views
0

只是好奇。具有下列簡單的類:如果構造函數被聲明爲不完整類型,會發生什麼?

public class Foo { 
    private static int fooVar = 1; 
    private int foo; 
    private int boo = 1; // another int, not a typo 
    public Foo(int foo) { 
     this.foo = foo; 
    } 
} 

呼喚:

Foo a, b, c; 

哪一個首先聲明? (我從左到右假設。)是否聲明實例變量fooVarfoo?記憶中會發生什麼?變量boo的值是否保存在內存中,即使構造函數尚未被調用?

+0

是什麼* *聲明意味着你在這裏?沒有對象被創建,所以實際上沒有任何事情發生。 – Tunaki

+2

您的代碼基本上每行都有編譯錯誤。發佈前請檢查您的代碼。 –

+1

'Foo a,b,c;'只爲三種參考類型預留堆棧幀中的插槽。沒有指令被執行。 – erickson

回答

0

Nikolas,

a,b和c是類型爲Foo的指針。正如你所說,他們應該從左向右宣佈。

因爲與聲明相同

Foo a;

Foo b;

Foo c;

內存中會發生什麼?變量boo的值是否保存在 內存中,甚至構造函數都沒有被調用?

有沒有這樣的價值噓或富(錯字?)。

如果尚未調用構造函數,則代碼中尚無對象。

如果做到這一點:

Foo a= new Foo(); 

你實際上是在做兩件事情,按照下面的順序:首先 創建一個Foo對象,那麼它是一個asigned到富指針。

記住你的構造函數就像一個方法。請(){前增加 如果你傳遞一個輸入變量,請這樣做的() 喜歡裏面:

public Foo(foo) { 
     this.foo = foo; } 
+0

對不起剛纔看到你的變量。不,他們沒有創建,因爲沒有任何對象。你到目前爲止只有指針。 –

相關問題