2016-07-31 73 views
0

我在Java Oracle教程中瞭解對象,並學習瞭如何引用對象字段。他們給了我兩種方式來做到這一點,並且我明白了第一種方法。然而,這樣做的第二種方法使我困惑。這是代碼:需要幫助瞭解未引用對象

int height = new Rectangle().height; 

我理解這個陳述本身,但這正是教程所說的讓我困惑的東西。教程中提到「這個語句創建一個新的Rectangle對象並立即獲得它的高度,實際上,這個語句計算出一個Rectangle的默認高度。注意,在這個語句執行完畢後,程序不再引用創建的Rectangle,因爲程序從來沒有在任何地方存儲引用,該對象是未引用的,並且它的資源可以被Java虛擬機自由回收。但是wait沒有被引用變量名稱「height」嗎? ?未引用我的理解是:

Rectangle rect1 = new Rectangle(1,2,3);// random arguements don't mind them 

那麼是什麼使這行代碼引用,但其他未引用

+0

第一個場景 - 對象在飛行中創建,訪問其變量,然後完成對象生命,從而未被引用。第二種情況 - 實際上你正在創建一個對象並賦值,意味着內存分配發生了,對象仍然存在,它可以在創建它的範圍中引用,因此它被稱爲仍被引用。 –

+0

@IndraUprade但是我在第一種情況下也沒有這樣做嗎?我創建了一個名爲「height」的對象引用,並使用「new」運算符分配內存。是不是rect1與高度相同?或者是第一個場景未被引用的原因,因爲我只是簡單地調用了高度字段? –

+0

是在第一個場景中創建的對象未被引用,您只使用它的屬性,而在第二個場景中實際上您使用的是對象引用作爲rect1。 –

回答

0

我認爲你試圖從字面上理解它。

但等待不是它與變量名稱「高度」引用?那麼它怎麼沒有引用呢?

你可以說,一個匿名引用被創建和以及...引用一次以獲得高度。

請注意,執行此語句後,程序不再具有對創建的Rectangle的引用,因爲程序從未在任何位置存儲引用。該對象未被引用,其資源可以被Java虛擬機自由回收。

由於引用是匿名的,因此不能在其他地方使用。因此之後的陳述沒有辦法引用該對象。如果是這樣,那麼爲什麼把它留在記憶中 - 它可能會被垃圾收集。