如果在finalize()期间抛出异常会发生什么

时间:2010-06-14 14:51:02

标签: java exception finalizer

如果在执行finalize()期间抛出异常会发生什么? 堆栈是否正常放松?它是否继续finalize()并忽略该异常?它是否会停止finalize()并继续GC对象?或者是其他东西?

我不是在寻找使用finalize()的指导方针,有很多页面可以解释这一点。

3 个答案:

答案 0 :(得分:9)

来自Object#finalize() javadoc:

  

finalize抛出的任何异常   方法导致最终化   要停止的对象,否则   忽略。

答案 1 :(得分:4)

编写终结器的正确方法,假设你有一个合理的理由来编写终结器,是这样的:

protected void finalize() throws Throwable
{
  try
  {
    // my finalization code
  }
  finally
  {
    super.finalize();
  }
}

答案 2 :(得分:1)

如果抛出异常,则终止调用finalize,下次不调用它,但是对象将从内存中进行GC编辑。