2011-12-31 83 views
7

構建新對象時,我使用下面的代碼。在這段代碼中,對象引用了變量'a'嗎?Java - 對象聲明和初始化

BankAcc a = new BankAcc(); 

另外,出於興趣,如果上述構造變量a的新對象,下面做了什麼?它只是創建一個沒有變量/對象引用的新對象嗎?

new BankAcc(); 

謝謝!

回答

7

是的,是的。

當你只想使用匿名對象而不關心引用時,第二個可能很有用。像:

new Thread(new Runnable() { 
    public void run() { } 
}).start(); 
+0

+1我還沒有做太多的線程,但我找到了這個例子,爲什麼你可能不需要引用一個有趣的對象 – 2011-12-31 16:16:14

+1

你也不需要保留一個引用,如果對象添加自己的排序收集作爲其內部建設/初始化的一部分。 – 2011-12-31 16:20:44

+0

@AaronJLang這也是非常有趣的,不知道你會在哪裏/什麼時候這樣做,但會看看它,謝謝。 – 2011-12-31 17:07:46

1

是的,它只是創建對象,但它不會被分配給任何引用,因此您不能訪問該對象並對該對象執行任何操作。它會留在那裏直到垃圾收集。

1

是的,是的。

請注意,僅僅創建一個類的新實例而不持有對它的引用並不是聞所未聞(儘管不一定是理想的),因爲該類的構造函數可以完成給定操作所需的所有內容。

1

第二行代碼實例化一個BankAcc類的匿名實例。

這是實例化一個類的快捷方式,它通常用於當你需要參考只有一次,例如一個類的實例傳遞給方法的參數:

myFunc(new BankAcc()); 
0

是變量引用是「a」,是new BankAcc();創建一個沒有變量的新對象,從而使其匿名。

3

new BankAcc()創建對象並調用構造函數。有時候,你需要做的,例如:

Rectangle rect = new Rectangle(new Point(100, 200), new Dimension(100, 300)); 

這僅僅是一個代碼示例,這樣你可以看到它如何被使用。

0

我覺得孫一些它非常好聽,

「新員通過一個新的對象分配內存,並返回到內存的引用實例化一個類,新的運營商也將調用對象的構造。」

所以是aBankAcc你與new操作實例化對象的引用,即要分配=new返回變量a這是類型BankAcc

的一個實例的引用,關於你的第二個點,這可以完成(編譯和執行),但我不明白爲什麼你會這麼做,除非構造函數做了一些「重要」的事情。

編輯:請參閱鐸的答案對於其中沒有參考實例實施例是適用

6

this Java tutorial通過使用

BankAcc a = new BankAcc(); 

解釋的,對象的創建是一個多步驟的處理。你有聲明實例初始化一步

我將只強調從教程這是有關您的問題最有趣的部分:

  • 聲明一變量,您使用type name;(在這種情況下爲BankAcc a;),這表示a將/可以用於指代類型爲BankAcc的數據。這時,a不引用任何對象

  • 實例化a使用new關鍵字。這將爲新對象分配內存並返回對該內存的引用。 new運算符需要一個單一的後綴參數:對構造函數的調用。您是否選擇將通過調用new返回的引用賦值給變量或不是。也可以直接在表達式中使用該參考文獻(例如new Rectangle().height;

  • 初始化是給構造,初始化新的對象的實際調用。構造函數由new運算符調用

-5

對象是實時實體或真實世界實體。對象的 例子是筆,汽車,板,表,鉛筆等,

假設看你的類名是Book.here我們如何申報對象

書的obj =新的圖書();