我在完成方法上遇到了困难的(对我来说)Java面试问题。假设您给出了finalize方法,如下所示:

public void finalize()
{
     a.b = this;
}


现在给出以下对象方案。



您将如何解决这个问题?如果A不是指B,那么这个问题可能会更容易,因为GC将运行,它将收集B并为B调用finalize,但是这里A指的是B,因此很难。在这种情况下如何完成工作?

有任何想法吗?提前致谢

最佳答案

考虑Java终结的最简单方法是将其视为每个带有终结器的对象所具有的额外“状态”。创建新对象时,此isFinalized位设置为false。当垃圾收集器发现带有终结器的对象不可访问时,它将检查此isFinalized位,并仅在为true时才回收该对象;如果为false,则运行终结器并将该位设置为true。设置后,将无法清除该位,因此在以后的任何时间运行垃圾收集器,如果无法访问,将对其进行收集。

关于java - Java面试方法的面试问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5864231/

10-10 22:49