final,finally和finalize的區別

                                                   final,finally和finalize的區別

一.總體區別

final       用於申明屬性,方法和類,表示屬性不可變,方法不可以被覆蓋,類不可以被繼承。
finally     是異常處理語句結構中,表示總是執行的部分。  
finallize   表示是object類一個方法,在垃圾回收機制中執行的時候會被調用被回收對象的方法。允許回收此前未回收的內存垃圾。所有object都繼承了                                   finalize()方法

二.final詳解

java中final也用來修飾3類東西:變量,方法和類。
1.變量
final修飾變量表示該變量是不可變的。例如 final int i =1;在程序中i的值就不允許改變了。比較容易混淆的是final用來修飾引用變量時,表示該引用變量是不可變的即引用變量指向的內存地址是不變的,但是被指的內存地址中的類是可以改變的。例如:
final MyClass myClass = new MyClass();
這樣聲明myClass後,其所指向的內存地址就固定了,但仍然可以改變myClass所引用對象的成員變量。如果試圖重用myClass這個變量,讓其引用另一個對象則會出錯。
myClass = new MyClass();//error!!!
2.方法
final修飾方法時表示該方法是不能被子類重寫的。
3.類

final修飾類時表示該類是不能被繼承的,由於java的單繼承關係,所以該類是繼承關係鏈中的終端。

關於final的幾個注意事項:

a、final變量必須在聲明的時候初始化或是在構造函數中初始化;
b、接口中聲明的所有變量都是final的;
c、final,finally,finalize的區別。final表示不可變,final表示必須執行的語句,finalize表示垃圾回收時執行的代碼。

三.finally 詳解

       Java異常處理模型與其他語言相比,關鍵詞finally是最出色的新增特性了。finally構件使得該區段中的代碼總是得以執行,而無論是否發生異常,特別適用於維護對象的內部狀態(用來保證異常發生恢復對象的有效狀態,以確保程序能在處理完異常後自動再次投入運行)和清理non-memory資源(垃圾回收機制無法處理的資源,如數據庫連接、Socket等等)。 

      但有一點值得注意,那就是儘量不要從try區段中返回(調用return),因爲只要有finally區段存在,它就一定會被執行,那麼如果你在finally區段中又調用了一次return語句,則try區段中的返回值將會被遮掩,使得方法調用者得到的是finally區段中的返回值--這常常又與程序編寫的初衷相背。


發佈了82 篇原創文章 · 獲贊 76 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章