我想知道它爲什麼需要寫這個語句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