5

如果在 finalize() 执行过程中抛出异常会发生什么?堆栈是否正常展开?它是否继续 finalize() 并忽略异常?它会停止 finalize() 并继续 GC 对象吗?或者是其他东西?

我不是在寻找使用 finalize() 的指南,有很多页面解释了这一点。

4

3 回答 3

9

Object#finalize() javadoc:

finalize 方法抛出的任何异常都会导致该对象的终结被暂停,否则会被忽略。

于 2010-06-14T14:53:13.883 回答
4

假设您有充分的理由编写终结器,编写终结器的正确方法是:

protected void finalize() throws Throwable
{
  try
  {
    // my finalization code
  }
  finally
  {
    super.finalize();
  }
}
于 2010-06-15T07:17:41.260 回答
1

如果抛出异常,则终止对 finalize 的调用,下次不会调用它,而是从内存中 GC-ed 对象。

于 2012-03-06T19:44:35.120 回答