在Java中删除对象?

2022-08-31 09:16:02

我想删除我创建的对象(跟随您的椭圆形),但是我该怎么做?

delete follower1;

不起作用。

编辑:

好吧,我会提供更多的背景信息。我正在制作一个小游戏,一个你可以控制的椭圆形,还有一个跟随你的椭圆形。现在我有了名为:DrawPanel的文件.class,这个类在屏幕上绘制所有内容,并处理碰撞,声音等。我有一个敌人.class,这是玩家后面的椭圆形。我有一个实体.class,这是你可以控制的玩家。如果玩家与关注者相交,我希望我的玩家对象被删除。我这样做的方式:

    public void checkCollisions(){
    if(player.getBounds().intersects(follower1.getBounds())){
        Follower1Alive = false;
        player.health = player.health - 10;
    }
}

答案 1

您应该通过分配 null 或将块保留在声明它的位置来删除对它的引用。之后,垃圾回收器将自动删除它(不是立即删除,而是最终删除)。

示例 1:

Object a = new Object();
a = null; // after this, if there is no reference to the object,
          // it will be deleted by the garbage collector

示例 2:

if (something) {
    Object o = new Object(); 
} // as you leave the block, the reference is deleted.
  // Later on, the garbage collector will delete the object itself.

不是您当前正在寻找的东西,而是FYI:您可以使用调用System.gc()调用垃圾回收器


答案 2

您的C++正在显示。

Java中没有,所有对象都是在堆上创建的。JVM 有一个依赖于引用计数的垃圾回收器。delete

一旦不再有对某个对象的引用,垃圾回收器就可以收集该对象。

myObject = null可能不会这样做;例如:

Foo myObject = new Foo(); // 1 reference
Foo myOtherObject = myObject; // 2 references
myObject = null; // 1 reference

所有这一切都将引用设置为 null,它不会影响一旦指向的对象,除了简单地将引用计数减少 1。由于仍然引用该对象,因此尚无法收集。myObjectmyObjectmyOtherObject


推荐