Java GC:在只扩展对象的类中调用super.finalize()有意义吗?

Java GC:在只扩展对象的类中调用super.finalize()有意义吗?,java,garbage-collection,finalize,Java,Garbage Collection,Finalize,关于在一个类扩展另一个非对象类时调用super.finalize()有很多讨论。但是,对于一个只隐式扩展对象的类,会有什么函数效应呢?若并没有效果,这只是一个很好的防御性编程,以防有人决定将该类显式地作为非对象类的子类?来自方法的文档 类对象的finalize方法不执行特殊操作;它只是正常返回。对象的子类可以覆盖此定义 对于-如果有人决定显式地使该类成为非对象类的子类,这只是一个好的防御编程吗-是的,您应该显式地调用super.finalize(),以确保GC正确发生。这不是过分的防御。:)首先

关于在一个类扩展另一个非对象类时调用
super.finalize()
有很多讨论。但是,对于一个只隐式扩展对象的类,会有什么函数效应呢?若并没有效果,这只是一个很好的防御性编程,以防有人决定将该类显式地作为非对象类的子类?

来自方法的文档

类对象的finalize方法不执行特殊操作;它只是正常返回。对象的子类可以覆盖此定义


对于-如果有人决定显式地使该类成为非对象类的子类,这只是一个好的防御编程吗-是的,您应该显式地调用
super.finalize()
,以确保GC正确发生。这不是过分的防御。:)首先你说“确保GC正确发生”,然后你说“这不是过度防御。”我很困惑——如果这不是防御,那它是什么?防御性对我来说意味着您正在阻止某些事情发生,比如将来编写的错误导致问题的代码,但是“确保GC正确发生”意味着进行此调用对使用当前代码的系统具有实际的直接影响。除非你的意思是本着防止未来威胁而不是当前迫在眉睫的威胁的精神确保。总之,是的,这是防御性的。如果所有终结器都调用
super.finalize()
(在它们自己的
finally
块中),那么它们都不会出错。