我收到 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/