删除java中的对象?

时间:2011-04-22 16:25:07

标签: java

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

delete follower1;

没用。

编辑:

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

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

7 个答案:

答案 0 :(得分:159)

您应该通过指定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.

不是您当前正在寻找的东西,但仅供参考:您可以通过调用System.gc()来调用垃圾收集器

答案 1 :(得分:59)

你的C ++正在展示。

java中没有delete,并且在堆上创建了所有对象。 JVM有一个垃圾收集器,它依赖于引用计数。

一旦没有对象的引用,它就可以被垃圾收集器收集。

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

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

所有这一切都将引用myObject设置为null,除了简单地将引用计数减1之外,它不会影响对象myObject。因为myOtherObject仍然引用对于那个目标,它还没有被收集。

答案 2 :(得分:12)

如果您想要帮助,对象就会消失,请将其引用设置为null。

String x = "sadfasdfasd";
// do stuff
x = null;

将引用设置为null将使对象更有可能被垃圾回收,只要没有对该对象的其他引用即可。

答案 3 :(得分:3)

您不需要删除java中的对象。当没有对象的引用时,垃圾收集器将自动收集它。

答案 4 :(得分:0)

您可以使用null删除引用。

假设您有课程A

A a = new A();
a=null;

last语句将删除对象a的引用,该对象将被JVM“垃圾收集”。 这是最简单的方法之一。

答案 5 :(得分:-2)

是的,java是Garbage收集的,它会为你删除内存。

答案 6 :(得分:-6)

//Just use a List
//create the list
public final List<Object> myObjects;

//instantiate the list
myObjects = new ArrayList<Object>();

//add objects to the list
Object object = myObject;
myObjects.add(object);

//remove the object calling this method if you have more than 1 objects still works with 1
//object too.

private void removeObject(){
int len = myObjects.size();
for(int i = 0;i<len; i++){
Objects object = myObjects.get(i);
myObjects.remove(object);
}
}