final,finally和finalize的区别
final,finally和finalize的區(qū)別
一.總體區(qū)別
final ? ? ? 用于申明屬性,方法和類,表示屬性不可變,方法不可以被覆蓋,類不可以被繼承。
finally ? ? 是異常處理語句結(jié)構(gòu)中,表示總是執(zhí)行的部分。
finallize ? 表示是object類一個(gè)方法,在垃圾回收機(jī)制中執(zhí)行的時(shí)候會(huì)被調(diào)用被回收對(duì)象的方法。允許回收此前未回收的內(nèi)存垃圾。所有object都繼承了 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? finalize()方法
二.final詳解
Java中final也用來修飾3類東西:變量,方法和類。
1.變量
final修飾變量表示該變量是不可變的。例如 final int i =1;在程序中i的值就不允許改變了。比較容易混淆的是final用來修飾引用變量時(shí),表示該引用變量是不可變的即引用變量指向的內(nèi)存地址是不變的,但是被指的內(nèi)存地址中的類是可以改變的。例如:
final MyClass myClass = new MyClass();
這樣聲明myClass后,其所指向的內(nèi)存地址就固定了,但仍然可以改變myClass所引用對(duì)象的成員變量。如果試圖重用myClass這個(gè)變量,讓其引用另一個(gè)對(duì)象則會(huì)出錯(cuò)。
myClass = new MyClass();//error!!!
2.方法
final修飾方法時(shí)表示該方法是不能被子類重寫的。
3.類
final修飾類時(shí)表示該類是不能被繼承的,由于java的單繼承關(guān)系,所以該類是繼承關(guān)系鏈中的終端。
關(guān)于final的幾個(gè)注意事項(xiàng):
a、final變量必須在聲明的時(shí)候初始化或是在構(gòu)造函數(shù)中初始化;
b、接口中聲明的所有變量都是final的;
c、final,finally,finalize的區(qū)別。final表示不可變,final表示必須執(zhí)行的語句,finalize表示垃圾回收時(shí)執(zhí)行的代碼。
三.finally 詳解
? ? ? ?Java異常處理模型與其他語言相比,關(guān)鍵詞finally是最出色的新增特性了。finally構(gòu)件使得該區(qū)段中的代碼總是得以執(zhí)行,而無論是否發(fā)生異常,特別適用于維護(hù)對(duì)象的內(nèi)部狀態(tài)(用來保證異常發(fā)生恢復(fù)對(duì)象的有效狀態(tài),以確保程序能在處理完異常后自動(dòng)再次投入運(yùn)行)和清理non-memory資源(垃圾回收機(jī)制無法處理的資源,如數(shù)據(jù)庫(kù)連接、Socket等等)。?
? ? ? 但有一點(diǎn)值得注意,那就是盡量不要從try區(qū)段中返回(調(diào)用return),因?yàn)橹灰衒inally區(qū)段存在,它就一定會(huì)被執(zhí)行,那么如果你在finally區(qū)段中又調(diào)用了一次return語句,則try區(qū)段中的返回值將會(huì)被遮掩,使得方法調(diào)用者得到的是finally區(qū)段中的返回值--這常常又與程序編寫的初衷相背。
from: http://blog.csdn.net/sheepmu/article/details/38326783
總結(jié)
以上是生活随笔為你收集整理的final,finally和finalize的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 序列化Serializable
- 下一篇: Java 多线程:synchronize