例如,这段代码有效吗?
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)
如果上述内容无效,请解释原因.在某些迭代不再存在之后,我需要一个类.请提出上述方法的替代方案.
不,这段代码无效.
此外,如果它有效,我看不出它有什么有意义的语义.
请提出上述方法的替代方案.
只要有对象的引用,该对象就存在.要使对象符合垃圾收集的条件,您只需确保没有指向它的引用(在您的情况下,这应该在y达到零时发生).
不.原因是你没有使对象为空.当你说obj = null;你只是把null变量,以前持有对象的引用.可能有很多其他对同一对象的引用.
我认为你想要做的是使一些无效的对象并使其被垃圾收集,但在课堂内做出这个决定.如果这是问题,我建议你看看弱引用.
其他可能的解决方案是在java中实现一种"智能引用".您可以创建SmartReference将保存对象的实际引用的类.该对象应该保持对此智能引用的回调,并调用其方法invalidate(),就像您的语法错误表达式this = null.您必须注意不要直接引用此类对象,而只能通过智能引用.
唯一的问题是"你为什么要这样做?".实际上,这会导致代码更复杂和不稳定.想象一下:对象决定使自己无效,因此"智能引用"所持有的引用就变成了null.现在,这个智能参考的所有持有者在尝试使用该对象时都会获得NPE!这正是java中不存在这种机制的原因,并且应用程序员不能直接管理内存.
底线:删除所有对象引用,让GC完成其艰苦的工作.相信它.它知道要清理垃圾.
| 归档时间: |
|
| 查看次数: |
1293 次 |
| 最近记录: |