在Java中删除对象

时间:2010-11-20 18:44:19

标签: java object graphics shapes

所以在我的程序中,我将几个不同的对象存储到一个数组中。我随机生成一个数字,该数字是数组的索引并克隆该对象(九次)以在我的屏幕上创建一个3x3的对象网格。

现在我的问题是在我拥有3x3网格后,我希望能够擦除它并生成数组中的新对象网格。问题是我想不出如何摆脱所有这些克隆除了只是将它们移出显示器,这似乎是浪费内存。我想做400次试验,所以最终会有很多克隆物。

有没有办法可以删除这些克隆对象?我必须创建新对象,因为我的数组中的一个对象可能在网格中被使用了两次。

3 个答案:

答案 0 :(得分:2)

我认为java垃圾收集器会为你做这件事。 当某个对象未被任何人引用时,系统会识别出该对象;但是当你说“将它们移出显示器”时,你的意思是什么?如果它们是“图形对象”,它们应该位于其他对象(如JFrame)中,因此您必须使用一个方法来告诉JFrame对象(或其他)抛出引用或用另一个引用覆盖引用。

答案 1 :(得分:0)

有助于意识到你没有处理实际的对象,你正在处理指针或对内存中对象的引用。所以:

Object obj = new Object();

不是对象,而是指向内存中对象的链接。通过将链接设置为null或将其替换为指向另一个对象的链接来删除链接,旧对象将被删除... ish。当垃圾收集运行时,它将被删除。所以:

obj = null;

obj = new Object();

基本上会删除旧对象。这同样适用于对象数组,您不是处理实际对象的数组,而是处理对象的链接数组。因此,通过将数组中的位置设置为null或将位置设置为新对象,将删除旧对象。所以:

ObjArray[4] = null;

ObjArray[4] = new Object;

将删除旧对象。

编辑:有些东西,我想我忘了提到,内存中的单个对象可以有多个链接到它,直到所有这些链接都被删除,该对象才能被垃圾收集删除。< / p>

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

在上面的例子中,当obj设置为null时,不会删除最初创建的对象,这是因为ObjArray中仍然存在指向它的链接。在对象消失之前,必须将obj和ObjArray [4]都设置为null。

答案 2 :(得分:0)

因为引用仍然保留在容器内。我认为你做了类似的事情:myJFrameObject.getContentPane.add(object_to_display);所以引用在myJFrameObject中,你可以使用myJFrameObject.getContentPane.remove。如果需要,可以使用setVisible(false)隐藏框架。这取决于具体情况。