2010-11-20 103 views
1

所以在我的程序中,我有幾個不同的對象存儲在一個數組中。我隨機生成一個數字,它是數組中的一個索引,並克隆該對象(九次),以在屏幕上製作一個3x3的對象網格。刪除Java中的對象

現在我的問題是,我有我的3X3網格後,我想能夠擦除,並在數組中生成一個新的網格對象。問題是我想不出如何擺脫所有這些克隆,除非將它們從顯示器中移出,這看起來像是浪費了內存。我想做400次試驗,所以最終會有很多克隆物體。

有沒有辦法可以刪除這些克隆的對象?我必須創建新的對象,因爲我的數組中的一個對象可能會在網格中使用兩次。

+0

您應該將顯示與邏輯分開。然後,這成爲一個非問題。(在一個現代系統中,即使是混亂和混亂的概念,它也可能不是問題。) – 2010-11-20 18:49:23

回答

2

我想java垃圾收集器會爲你做。 當一個對象沒有被任何人引用時,當系統識別出這個對象時它將被刪除;但是當你說「將它們移出顯示器」時,你是什麼意思?如果它們是「圖形對象」,它們應該位於其他對象(如JFrame)內部,因此您必須使用一種方法來告訴JFrame對象(或其他對象)拋出引用或用另一個引用覆蓋引用。

0

它有助於認識到你沒有處理實際的對象,你正在處理指向內存中對象的指針或引用。所以:

Object obj = new Object(); 

不是一個對象,而是一個指向內存中對象的鏈接。通過將鏈接設置爲空或將其替換爲另一個對象的鏈接來刪除鏈接,舊對象將被刪除... ish。當垃圾收集運行時,它將被刪除。所以:

obj = null; 

obj = new Object(); 

基本上將刪除舊的對象。這同樣適用於對象數組,您不是處理實際對象數組,而是處理對象鏈接數組。因此,通過將數組中的位置設置爲null或將位置設置爲新對象,舊對象將被刪除。所以:

ObjArray[4] = null; 

ObjArray[4] = new Object; 

將刪除舊的對象。

編輯:我猜我忘了提及的東西,內存中的單個對象可以有多個鏈接,直到所有這些鏈接都被刪除,對象才能被垃圾回收刪除。

Object obj = new Object(); 
ObjArray[4] = obj; 
obj=null; 

在上述情況下,最初創建不會被刪除時的obj設置爲null的對象,這是因爲它的鏈接在ObjArray仍然存在。在對象消失之前,必須將obj和ObjArray [4]都設置爲null。

+0

謝謝,但由於某種原因,如果我執行代碼: Target t = new Target(x,y); t = null; 然後當我在我的顯示器上仍然顯示圖形,那麼有沒有辦法強制垃圾收集器做它的工作或什麼? – Douglas 2010-11-20 20:16:37

+0

@Douglas單獨關注。那麼這將是有道理的。 – 2010-11-20 20:38:18

+0

@Douglas,多加了一些關於多個參考文獻的回答。 – phill 2010-11-20 20:56:05

0

因爲引用仍然保留在容器內。我認爲你已經做了類似的事情:myJFrameObject.getContentPane.add(object_to_display);因此引用位於myJFrameObject內部,您可以使用myJFrameObject.getContentPane.remove作爲示例。如果你想要,你可以使用setVisible(false)來隱藏框架。這取決於實際情況。