我收到 SonarQube 错误:“强烈建议在此方法实现的末尾调用 super.finalize(),以防父实现还必须处理一些系统资源。”

但是我发现 Object 类没有实现 finalize 方法。

protected void finalize() throws Throwable { }

那么为什么需要调用 super.finalize() 呢?

最佳答案

这不是必需的,它是应该遵循的终结器写作习惯用法。

如果在 future 的任何时候,您重构您的代码并且您的类扩展了一些可能具有 finalize 方法的其他类,这种做法将防止出现奇怪的错误。

成语是

try {
   // Do whatever the finalization is
}
finally {
   super.finalize();
}

这确保了父类(super class)终结器,如果有一个非平凡的终结器,即使抛出一些异常也会被调用(因为在终结器中没有任何异常捕获,它们的执行只是停止)。

当然: 避免终结器 。 (Joshua Bloch 的 Effective Java,第二版中的第 7 项)。

关于java - 为什么在覆盖 finalize() 方法时优先调用 super.finalize()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31985830/

10-11 04:32