我收到SonarQube错误:" 强烈建议在此方法实现结束时调用super.finalize()
,以防父实现必须也处置一些系统资源. "
但我发现Object
该类没有实现finalize方法.
protected void finalize() throws Throwable { }
Run Code Online (Sandbox Code Playgroud)
那为什么需要打电话super.finalize()
?
这不是一个需要,它是一个应该遵循的终结者写作成语.
如果在将来的任何时候,您重构代码并且您的类扩展了其他可能有finalize
方法的类,这种做法可以防止出现奇怪的错误.
这个成语是
try {
// Do whatever the finalization is
}
finally {
super.finalize();
}
Run Code Online (Sandbox Code Playgroud)
这确保了即使抛出一些异常,也会调用超类终结器(如果有一个非平凡的终结器)(因为没有捕获终结器中的异常,它们的执行只是停止).
当然:避免终结者.(Joshua Bloch的Effective Java第二版第7项).
类Object的finalize方法不执行任何特殊操作; 它只是正常返回.Object的子类可以覆盖此定义.
谁知道,super
你现在的班级ovveriden这个方法.
查看以下层次结构中的位置.
Object --- no implementation
--
-- Your Super class -- Overriden the finalize
-- Current class
Run Code Online (Sandbox Code Playgroud)
超级并不总是代表Object
班级.中间可能没有超级课程.
归档时间: |
|
查看次数: |
2872 次 |
最近记录: |