如果在执行finalize()期间抛出异常会发生什么? 堆栈是否正常放松?它是否继续finalize()并忽略该异常?它是否会停止finalize()并继续GC对象?或者是其他东西?
我不是在寻找使用finalize()的指导方针,有很多页面可以解释这一点。
答案 0 :(得分:9)
来自Object#finalize() javadoc:
finalize抛出的任何异常 方法导致最终化 要停止的对象,否则 忽略。
答案 1 :(得分:4)
编写终结器的正确方法,假设你有一个合理的理由来编写终结器,是这样的:
protected void finalize() throws Throwable
{
try
{
// my finalization code
}
finally
{
super.finalize();
}
}
答案 2 :(得分:1)
如果抛出异常,则终止调用finalize,下次不调用它,但是对象将从内存中进行GC编辑。