1. 程式人生 > >finalize和finally傻傻分不清楚

finalize和finally傻傻分不清楚

一. finalize 用途
答: 垃圾回收器(garbage colector)決定回收某物件時, 就會執行該物件的 finalize()方法 但是在 Java 中很不幸, 如果記憶體總是充足的, 那麼垃圾回收可能永遠不會進行, 也就是說 filalize()可能永遠不被執行, 顯然指望它做收尾工作是靠不住的。 那麼 finalize()究竟是做什麼的呢? 它最主要的用途是回收特殊渠道申請的記憶體。 Java 程式有垃圾回收器, 所以一般情況下記憶體問題不用程式設計師操心。但有一種 JNI(Java Native Interface)呼叫 non-Java程式(C 或 C++) , finalize()的工作就是回收這部分的記憶體。

二. finally
Try catch finally
在try中return之前會執行finally中的程式碼,如果finally中有return,直接return
值為finally中修改的,如果finally中沒有return,則執行try中的return,數值仍然是try中的

finally 一定會被執行, 如果 finally 裡有 return 語句, 則覆蓋 try/catch 裡的 return ,比較愛考的是 finally 裡沒有 return 語句, 這時雖然 finally 裡對 return 的值進行了修改, 但 return 的值並不改變這種情況

三. finally 程式碼塊和 finalize()方法有什麼區別?
無論是否丟擲異常, finally 程式碼塊都會執行, 它主要是用來釋放應用佔用的資源。
finalize()方法是 Object 類的一個 protected 方法, 它是在物件被垃圾回收之前由 Java 虛擬機器來呼叫的。