有没有办法在对象内部销毁当前实例?
我正在寻找类似如下的解决方案:
class KillMe {
....
public void destroy() {
this.getObject = null //this is only for demonstrate my idea
}
....
}
有没有办法在对象内部销毁当前实例?
我正在寻找类似如下的解决方案:
class KillMe {
....
public void destroy() {
this.getObject = null //this is only for demonstrate my idea
}
....
}
Java对象会一直存在,直到没有任何引用指向它。因为一个对象无法确定有多少引用指向它,所以一个对象不能“自毁”。
该对象没有访问对自身的引用的权限,因此无法将其设置为null
或其他值。只有当垃圾回收器遍历清除所有未被引用的对象时,该对象才能被“销毁”。
话虽如此,请尝试以下操作:
public void destroy() {
System.exit( 0 );
}
不,对象不能自杀。任何对它本身的引用都只是一个引用。
要在对象内部“清除”对象,只需清除所有实例变量即可。
要在对象外部“清除”对象,只需将变量设置为null。
您想要做的示例表明您没有理解对象何时被销毁/清除的方式。
class KillMe {
....
public void destroy() {
this.getObject = null //this is only for demonstrate my idea
}
}
你所调用的方法 (this.getObject
) 获取了当前对象的引用,然后将该引用设置为 null(即不再指向当前对象)。它不会对对象本身进行任何操作,也不会改变代码中其他指向该对象的变量。
可以这样考虑... 变量指向值(对象)。只要还有变量指向某个值,该值就会被保留(不会被垃圾回收/销毁)。为了删除所有指向某个值的变量引用,您需要找到所有指向它的变量,并将它们指向其他东西(例如 null)。实际上,您无法做到这一点(尽管我认为通过足够可怕的反射和/或字节码魔术,没有什么是不可能的;)
换个角度思考,如果您能够销毁值/对象本身,那么所有当前指向它的其他变量会发生什么?它们现在指向已释放的内存,导致某种 Java 版本的段错误吗?