在Java中删除对象

在Java中删除对象,java,object,graphics,shapes,Java,Object,Graphics,Shapes,所以在我的程序中,有几个不同的对象存储在一个数组中。我随机生成一个数字作为数组的索引,并克隆该对象(九次),在屏幕上形成一个3x3的对象网格 现在我的问题是,在我有了3x3网格后,我希望能够删除它,并生成一个新的网格,其中的对象在数组中。问题是我想不出如何摆脱所有这些克隆,除了把它们从显示屏上移开,这似乎是在浪费内存。我想做400次试验,这样到最后会有很多克隆对象 有没有办法删除这些克隆对象?我必须创建新的对象,因为我数组中的一个对象可能在网格中被使用两次。我认为java垃圾收集器可以帮你做到这

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

现在我的问题是,在我有了3x3网格后,我希望能够删除它,并生成一个新的网格,其中的对象在数组中。问题是我想不出如何摆脱所有这些克隆,除了把它们从显示屏上移开,这似乎是在浪费内存。我想做400次试验,这样到最后会有很多克隆对象


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

我认为java垃圾收集器可以帮你做到这一点。
当一个对象没有被任何人引用时,当系统识别到它时,它将被删除;但是当你说“把它们从显示器上移开”是什么意思呢?如果它们是“图形对象”,它们应该位于其他对象(如JFrame)内,因此您必须使用一种方法来告诉JFrame对象(或其他对象)丢弃引用或用另一个引用覆盖引用。

这有助于认识到您不是在处理实际对象,您正在处理指向内存中对象的指针或引用。因此:

Object obj = new Object();
不是对象,而是指向内存中对象的链接。通过将链接设置为null或将其替换为指向另一个对象的链接来删除链接,旧对象将被删除。当垃圾收集运行时,它将被删除。因此:

obj = null;
ObjArray[4] = null;

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

obj = null;
ObjArray[4] = null;

将删除旧对象

编辑:我想我忘了提一下,内存中的一个对象可以有多个指向它的链接,直到所有这些链接都被删除后,该对象才能被垃圾收集删除

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

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

因为引用仍然保留在容器中。我认为您已经完成了类似的操作:myJFrameObject.getContentPane.add(object\u to\u display);因此,引用位于myJFrameObject内部,例如,您可以使用myJFrameObject.getContentPane.remove。如果需要,可以使用setVisible(false)隐藏帧。这取决于具体情况。

您应该将显示与逻辑分开。那么这就不是问题了。(在现代系统中,这可能不是一个问题,即使是令人讨厌和混淆的概念。)谢谢,但出于某种原因,如果我执行代码:Target t=new Target(x,y);t=零;那么,当我的显示器上仍然显示图形时,有没有办法强制垃圾收集器执行其工作或其他事情呢?@Douglas表示关注。“那么这就有意义了。”道格拉斯在我的回答中补充了一点关于多重引用的内容。