gpt4 book ai didi

java - 为什么在覆盖 finalize() 方法时首选调用 super.finalize()?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:11:40 47 4
gpt4 key购买 nike

我收到 SonarQube 错误:“强烈建议在此方法实现结束时调用 super.finalize(),以防父实现也必须释放一些系统资源。

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

protected void finalize() throws Throwable { }

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

最佳答案

这不是必须的,它是应该遵循的finalizer写成语。

如果在未来的任何时候,您重构了您的代码并且您的类扩展了一些可能具有 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/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com