Java 如何通过自己的类删除对象?

Java 如何通过自己的类删除对象?,java,null,garbage,Java,Null,Garbage,我知道如何通过将对象的引用变量设置为null,为垃圾收集器留下删除对象的信号: Player player_reference = new Player(); player_reference = null; // Now the Garbage collector knows to release all the memory related to this object. 但是如何通过对象的类将引用变量设置为null呢 class Player { public void doS

我知道如何通过将对象的引用变量设置为null,为垃圾收集器留下删除对象的信号:

Player player_reference = new Player();
player_reference = null; 
// Now the Garbage collector knows to release all the memory related to this object.
但是如何通过对象的类将引用变量设置为null呢

class Player {
    public void doSomthing() {
        if(condition) {
            // some code which set the reference variable to null.
        }
    }
}
我知道如何通过将引用变量设置为null,为垃圾收集器留下删除对象的信号

这并不是真正的“信号”——它只是确保所讨论的变量不会阻止垃圾回收。你真的,真的需要弄清楚变量、引用和对象之间的区别。这个问题毫无意义:

但是如何通过对象类将引用变量设置为null呢

什么参考?可能有多个变量,所有变量的值都是对同一对象的引用。或者实际上可能没有这样的变量-您可以通过一些中间表达式调用该方法:

foo().bar().doSomething();
在这种情况下,您希望将哪个变量设置为null

当在任何线程中都无法再访问该对象时,该对象将有资格进行垃圾收集。您不需要手动删除它,也不需要向垃圾收集器发出“信号”。这将自然发生

我知道如何通过将引用变量设置为null,为垃圾收集器留下删除对象的信号

这并不是真正的“信号”——它只是确保所讨论的变量不会阻止垃圾回收。你真的,真的需要弄清楚变量、引用和对象之间的区别。这个问题毫无意义:

但是如何通过对象类将引用变量设置为null呢

什么参考?可能有多个变量,所有变量的值都是对同一对象的引用。或者实际上可能没有这样的变量-您可以通过一些中间表达式调用该方法:

foo().bar().doSomething();
在这种情况下,您希望将哪个变量设置为null


当在任何线程中都无法再访问该对象时,该对象将有资格进行垃圾收集。您不需要手动删除它,也不需要向垃圾收集器发出“信号”。它会自然而然地发生。

除非所讨论的引用变量属于类本身,否则不能这样做。你不能也不需要这样做。每个对象一旦不再被引用,就有资格被garbace收集,除非我弄错了,我相信他只是在问如何通过将一个名为delete的函数放入player类来删除player\u引用,该函数的作用与将player\u reference设置为null相同。@Shelef我相信这就是您正在寻找的。。。除非所讨论的引用变量属于类本身,否则不能,也不需要。每个对象一旦不再被引用,就有资格被garbace收集,除非我弄错了,我相信他只是在问如何通过将一个名为delete的函数放入player类来删除player\u引用,该函数的作用与将player\u reference设置为null相同。@Shelef我相信这就是您正在寻找的。。。我会解释我想做什么,也许你会知道如何帮助我。我制作了一个BlackTransition类,它可以创建简单的动画,将屏幕变成黑色。BlackTransition类生成处理动画的线程。转换在大约3个SCOND中结束,因此不再需要该对象。只有BlackTransition对象知道它何时结束。因此,在转换结束后,我希望只删除对象本身。当然,我可以通过BlackTransition调用将引用设置为null的方法。但是没有别的办法了?@Shelef:你想得太多了。只需让垃圾收集器处理它—当不再有任何东西引用它时,它将清理
BlackTransition
的实例。blacktransition的对象持有者类永远不知道blacktransition何时结束。我最终使BlackTransition成为可观察的。@Shelef:Ah-如果你有其他东西抓住了
BlackTransition
,那就不同了。我会解释我想做什么,mybe你会知道如何帮助的。我制作了一个BlackTransition类,它可以创建简单的动画,将屏幕变成黑色。BlackTransition类生成处理动画的线程。转换在大约3个SCOND中结束,因此不再需要该对象。只有BlackTransition对象知道它何时结束。因此,在转换结束后,我希望只删除对象本身。当然,我可以通过BlackTransition调用将引用设置为null的方法。但是没有别的办法了?@Shelef:你想得太多了。只需让垃圾收集器处理它—当不再有任何东西引用它时,它将清理
BlackTransition
的实例。blacktransition的对象持有者类永远不知道blacktransition何时结束。我最终使BlackTransition成为可观察的。@Shelef:Ah-如果你有其他东西抓住了
BlackTransition
,那就不同了。