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區段中的返回值--這常常又與程序編寫的初衷相背。
總結
以上是生活随笔為你收集整理的final, finally, finalize 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么我饿了么产品总监不干,却要从事自由
- 下一篇: 高级产品经理的思维方式