一个类可以从类本身中取消吗?

jig*_*mnc 2 java class this

例如,这段代码有效吗?

class abc{
    int x,y;
    abc(int x,int y){
        this.x=x;
        this.y=y;
        while(true)
            update();
    }

    public void update(){
        x--;
        y--;
        if(y==0)
            this=null;
    }
 }
Run Code Online (Sandbox Code Playgroud)

如果上述内容无效,请解释原因.在某些迭代不再存在之后,我需要一个类.请提出上述方法的替代方案.

NPE*_*NPE 7

不,这段代码无效.

此外,如果它有效,我看不出它有什么有意义的语义.

请提出上述方法的替代方案.

只要有对象的引用,该对象就存在.要使对象符合垃圾收集的条件,您只需确保没有指向它的引用(在您的情况下,这应该在y达到零时发生).


Ale*_*exR 5

不.原因是你没有使对象为空.当你说obj = null;你只是把null变量,以前持有对象的引用.可能有很多其他对同一对象的引用.

我认为你想要做的是使一些无效的对象并使其被垃圾收集,但在课堂内做出这个决定.如果这是问题,我建议你看看弱引用.

其他可能的解决方案是在java中实现一种"智能引用".您可以创建SmartReference将保存对象的实际引用的类.该对象应该保持对此智能引用的回调,并调用其方法invalidate(),就像您的语法错误表达式this = null.您必须注意不要直接引用此类对象,而只能通过智能引用.

唯一的问题是"你为什么要这样做?".实际上,这会导致代码更复杂和不稳定.想象一下:对象决定使自己无效,因此"智能引用"所持有的引用就变成了null.现在,这个智能参考的所有持有者在尝试使用该对象时都会获得NPE!这正是java中不存在这种机制的原因,并且应用程序员不能直接管理内存.

底线:删除所有对象引用,让GC完成其艰苦的工作.相信它.它知道要清理垃圾.