Finalizer 不可計劃的,也是危險的,一般也是不必要的.
不能在finalizer中放任何與依賴時間相關的操作,因爲你不知道它什麼時候被執行. 比如在finalizer中關閉文件的做法就是錯誤的, 根據JVM的實現方式不同,有可能導致打開的文件數過多而無法再打開文件.
也不能在finalizer中改變狀態,如給數據庫解鎖等.
finalizer還能帶來嚴重的性能問題,
顯示的調用的終止函數可以採用try -finally的語句
當然,合法的使用finalizer有兩種情況:
一種是做爲最後的一道關卡,檢測用戶是否有沒有被釋放的資源,如果有則釋放它,並打印出警告. 雖然不提倡在finalizer中釋放資源,但晚釋放總比不釋放好(beter later than never)
還一種合法使用就是在使用 native方法的時候.
要注意,finallizer沒有承繼關係,在子類中必須顯示調用父類中的函數.