你在子类中调用super.finalize()吗?

use*_*112 7 java inheritance garbage-collection

我读(某处),finalize()当子类被垃圾收集时,不能保证调用父类,这是否意味着大多数开发人员finalize()在子类中重写并调用super.finalize()

Jef*_*rey 13

超类不会自动调用Finalize.因此,如果您覆盖finalize,确保超类被清理的正确方法将是

protected void finalize() {
    try {
       // do subclass cleanup
    }
    finally {
       super.finalize();
    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅此参考文章http://www.ibm.com/developerworks/java/library/j-jtp06294/index.html

值得注意的是,终结器不是非常可预测的,并且您无法控制它们何时/何时运行.在finalize方法中不应该做任何关键的事情.一般来说,最好只执行类的显式清理.