我想知道它为什么需要写这个语句super.finalize()在下面的代码中的finalize()方法
代码。
protected void finalize() throws Throwable {
try {
close();
} catch(Exception e) {
}
finally {
super.finalize();
}
}
我想知道它为什么需要写这个语句super.finalize()在下面的代码中的finalize()方法
代码。
protected void finalize() throws Throwable {
try {
close();
} catch(Exception e) {
}
finally {
super.finalize();
}
}
你覆盖finalize方法,并因为你这样做,你需要调用家长finalize
方法为好。否则,它可能没有相应地关闭流或其他资源。
您不必非常确定地调用该对象的finalize()
方法,但是,例如,您可能会产生非常糟糕的错误。将代码复制/粘贴到另一个类或更改继承的父代。
它封装在finally块中以确保始终调用它,而不管发生了什么(例如close()方法中的异常)。
你也应该看看的Javadoc:http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#finalize
如果close()
抛出一个异常,那么超类的终结绝不会没有finally
条款被调用。虽然,如果超类仅仅是一个Object
那么它真的没有关系:根据文档,类Object的finalize方法不执行特殊操作;它通常只是返回。
可能没必要:类Object的finalize方法不执行特殊操作;它只是正常返回。 Object的子类可能会覆盖此定义.' – erickzetta 2011-05-30 11:54:15
谢谢simon .... – yagnya 2011-05-30 11:54:27
*否则可能不会在任何时候垃圾回收对象。*这完全不是真的,finalize用于管理资源不是JVM本身。对象**将是GC **'d,但任何托管资源可能都不是。 – bestsss 2011-05-30 11:59:56