是否存在任何有關是否使用finalize()
清除對象的詳細信息,如果該對象的構造函數是異常。構造函數拋出異常後可以調用finalize嗎?
當這種方法被稱爲是臭名昭着的病態定義。根據手冊:
Java編程語言不保證哪個線程將 調用某個給定對象的finalize方法。但是,保證, 然而,當調用finalize時,調用finalize的線程將不會保留任何 用戶可見的同步鎖。如果finalize方法引發了 未捕獲的異常,則忽略 異常,並終止該對象的終止。
http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#finalize%28%29
我已經無法觸發finalize方法以這種方式。有沒有人知道它是不是被調用的,或者在某些情況下在構造函數未能初始化對象之後調用它(這是一個例外)。
我問這是因爲我有一個對象,不能清理兩次。我試圖瞭解是否在拋出異常之前清理是否安全,或者如果我必須爲finalize()
留下標記以有效地跳過並不執行任何操作。
+1我懷疑這是你將需要檢查不同的JVM可能表現不同。 –
使用'finalize'是邪惡的。 –
@Peter JLS非常具體,一旦對象[base] Object的構造函數成功完成,對象就可以終結。 –