我想删除我创建的对象(跟随你的椭圆),但是我该怎么做?
delete follower1;
没用。
编辑:
好的,我会给出更多背景信息。我正在制作一个你可以控制的椭圆形游戏,还有一个跟随你的椭圆形游戏。现在我有了名为:DrawPanel.class的文件,这个类在屏幕上绘制所有内容,并处理碰撞,声音等。我有一个enemy.class,它是玩家后面的椭圆形。我有一个entity.class,这是你可以控制的玩家。如果玩家与追随者相交,我希望我的玩家对象被删除。我这样做的方式:
public void checkCollisions(){
if(player.getBounds().intersects(follower1.getBounds())){
Follower1Alive = false;
player.health = player.health - 10;
}
}
答案 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);
}
}