删除java中的对象?

删除java中的对象?,java,Java,我想删除我创建的一个对象(一个跟在你后面的椭圆形),但我该怎么做呢 delete follower1; 没用 编辑: 好的,我会提供更多的上下文。我正在做一个小游戏,有一个你可以控制的椭圆形,还有一个跟在你后面的椭圆形。现在我有了一个名为DrawPanel.class的文件,这个类绘制屏幕上的所有内容,并处理碰撞、声音等。我有一个敌手.class,它是跟随玩家的椭圆形。我有一个entity.class,你可以控制它。如果玩家与跟随者相交,我希望我的玩家对象被删除。我的做法是: publ

我想删除我创建的一个对象(一个跟在你后面的椭圆形),但我该怎么做呢

delete follower1;
没用

编辑:

好的,我会提供更多的上下文。我正在做一个小游戏,有一个你可以控制的椭圆形,还有一个跟在你后面的椭圆形。现在我有了一个名为DrawPanel.class的文件,这个类绘制屏幕上的所有内容,并处理碰撞、声音等。我有一个敌手.class,它是跟随玩家的椭圆形。我有一个entity.class,你可以控制它。如果玩家与跟随者相交,我希望我的玩家对象被删除。我的做法是:

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

Java有一个垃圾收集器,如果不再持有对该对象的引用,它将为您删除该对象。

如果您希望帮助对象离开,请将其引用设置为null

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

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

您应该通过赋值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.

这不是您当前正在寻找的东西,但仅供参考:您可以通过调用调用调用垃圾收集器,而无需删除java中的对象。当没有对象引用时,它将被垃圾回收器自动收集。

< p>显示您的C++。


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

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

myObject=null
可能无法执行此操作;例如:

Foo myObject = new Foo(); // 1 reference
Foo myOtherObject = myObject; // 2 references
myObject = null; // 1 reference
所有这一切都是将reference
myObject
设置为null,它不会影响指向的对象
myObject
,只是简单地将引用计数减少1。由于
myOtherObject
仍然引用该对象,因此还无法收集该对象。

//只需使用列表即可
//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);
}
}
//创建列表 公开最终目标清单; //实例化列表 myObjects=新的ArrayList(); //将对象添加到列表中 对象=myObject; myObjects.add(对象); //如果有多个对象仍与1一起使用,请删除调用此方法的对象 //我也反对。 私有void removeObject(){ int len=myObjects.size();
对于(int i=0;i您可以使用
null
删除引用

假设您有class
A

A a = new A();
a=null;
最后一条语句将删除对象
a
的引用,该对象将被JVM“垃圾收集”。

这是最简单的方法之一。

您能提供更多的上下文吗?Java中没有删除对象的功能。但您通常不需要:您需要的是确保屏幕上不再显示任何内容(如果这是“跟随您”所做的操作)。可能您想尝试强制垃圾回收器删除某个对象?已经有一个问题。或者您正在尝试其他操作?您可以尝试阅读一些关于垃圾回收器的信息,或者如果仍然没有帮助,则需要更具体。如果确实要处理对象分配,则可能重复手动使用JNI:创建一个C/C++库,它可以从Java代码中使用,但它自己做所有事情(创建、删除等)——但是在库中你有C/C++代码,没有Java。我没有看到任何手动删除Java对象的方法。如果你的探查器告诉你有问题,这些问题通常基于“忘记”对对象的引用。在您的情况下,似乎任何地方都没有问题。在最不期望的时刻/delete/leak/gWhen我这样做时,当我的对象相交时,我的整个游戏将冻结,并且不会删除该对象。因为您可能会抛出未捕获的空指针异常。更多上下文肯定会帮助我们指导您因此,我应该在
onPause
中将我的所有文本视图和图像按钮设置为null?如果您确实需要它们消失,那么最终也可以做到。必须手动调用
System.gc()
通常是,因为JVM实际上可能会忽略它。这不是一个好主意,但您也可以调用类似System..Runtime.getRuntime().gc()。更多信息:Java提供的垃圾收集例程是Runtime类的成员。Runtime类是一个具有单个对象(单例)的特殊类对于每个主程序。Runtime对象提供了一种直接与虚拟机通信的机制。要获取运行时实例,可以使用Runtime.getRuntime()方法,它返回单例。
null
assignment是否为GC的一个明确标志,表示该对象将在下一次GC调用中被垃圾清理?*将
null
赋值给集合对象(列表、数组)标记它们以进行清理?因此我应该在
onPause
中将我的所有文本视图和图像按钮设置为空?无法保证垃圾收集器会运行,或者如果运行,它将收集(而不是“删除”)任何特定对象。因此我应该在
onPause
中将我的所有文本视图和图像按钮设置为空?“JVM有一个依赖于引用计数的垃圾收集器。"->这是一个非常简单的解释。JVM有一个垃圾收集器,它特别不依赖于引用计数。它依赖于可达性。如果它依赖于引用计数,它永远不会收集周期,它确实如此。有没有办法在将标识符设置为null后使其无效?我不是说它将用于指向不同类型或某物的指针(在同一个范围内有两个标识符用于不同的事情通常是不明智的。为什么不使用两个不同的名称?);如果我以后试图使用该标识符,我可能只想让编译器对我大喊大叫