final finally finalize 區(qū)別及用法:
1,final修飾的class,代表不可以繼承擴(kuò)展。
2、final的方法也是不可以重寫的。
3、final修飾的變量是不可以修改的。這里所謂的不可修改對于基本類型來來,的確是不可以修改。而對于引用類型來說,只能說不能重新賦值。也就是不能改變引用地址。但是作為引用類型,它內(nèi)部所包含的內(nèi)容如果不是final則可以隨意修改
Finally : 提到finally,那么try-catch就逃不掉了。finally 則是Java保證重點代碼一定要被執(zhí)行的一種機(jī)制。最常用的地方:通過try-catch-finally來進(jìn)行類似資源釋放、保證解鎖等動作
Finalize: 設(shè)計之初的作用就是:在CG要回收某個對象時,讓這個對象有底氣的大喊一聲:“報告,我還能再搶救一下!”。但是也正是因為如此,JVM要對它進(jìn)行額外處理。finalize也就成為了CG回收的阻礙者,也就會導(dǎo)致這個對象經(jīng)過多個垃圾收集周期才能被回收。
區(qū)別
一、性質(zhì)不同
(1)final為關(guān)鍵字; (2)finalize()為方法; (3)finally為為區(qū)塊標(biāo)志,用于try語句中;
二、作用
(1)final為用于標(biāo)識常量的關(guān)鍵字,final標(biāo)識的關(guān)鍵字存儲在常量池中(在這里final常量的具體用法將在下面進(jìn)行介紹);
(2)finalize()方法在Object中進(jìn)行了定義,用于在對象“消失”時,由JVM進(jìn)行調(diào)用用于對對象進(jìn)行垃圾回收,類似于C++中的析構(gòu)函數(shù);用戶自定義時,用于釋放對象占用的資源(比如進(jìn)行I/0操作);
(3)finally{}用于標(biāo)識代碼塊,與try{}進(jìn)行配合,不論try中的代碼執(zhí)行完或沒有執(zhí)行完(這里指有異常),該代碼塊之中的程序必定會進(jìn)行
1.簡單區(qū)別:
final用于聲明屬性,方法和類,分別表示屬性不可交變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。
finalize是Object類的一個方法,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法,供垃圾收集時的其他資源回收,例如關(guān)閉文件等。
2.中等區(qū)別:
雖然這個單詞在Java中都存在,但是并沒太多關(guān)聯(lián):
final:java中的關(guān)鍵字,修飾符。
A).如果一個類被聲明為final,就意味著它不能再派生出新的子類,不能作為父類被繼承。因此,一個類不能同時被聲明為abstract抽象類的和final的類。
B).如果將變量或者方法聲明為final,可以保證它們在使用中不被改變.
1)被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。
2)被聲明final的方法只能使用,不能重載。
finally:java的一種異常處理機(jī)制。
finally是對Java異常處理模型的最佳補(bǔ)充。finally結(jié)構(gòu)使代碼總會執(zhí)行,而不管無異常發(fā)生。使用finally可以維護(hù)對象的內(nèi)部狀態(tài),并可以清理非內(nèi)存資源。特別是在關(guān)閉數(shù)據(jù)庫連接這方面,如果程序員把數(shù)據(jù)庫連接的close()方法放到finally中,就會大大降低程序出錯的幾率。
finalize:Java中的一個方法名。
Java技術(shù)使用finalize()方法在垃圾收集器將對象從內(nèi)存中清除出去前,做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒被引用時對這個對象調(diào)用的。它是在Object類中定義的,因此所的類都繼承了它。子類覆蓋finalize()方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize()方法是在垃圾收集器刪除對象之前對這個對象調(diào)用的。
3.詳細(xì)區(qū)別:
這是一道再經(jīng)典不過的面試題了,我們在各個公司的面試題中幾乎都能看到它的身影。final、finally和finalize雖然長得像孿生兄弟一樣,但是它們的含義和用法卻是大相徑庭。
final關(guān)鍵字我們首先來說說final。它可以用于以下四個地方:
1).定義變量,包括靜態(tài)的和非靜態(tài)的。
2).定義方法的參數(shù)。
3).定義方法。
4).定義類。
Final: 用于修飾類、成員變量和成員方法。final修飾的類,不能被繼承(String、StrngBuilder、StringBuffer、Math,不可變類),其中所有的方法都不能被重寫,所有不能同時用abstract和final修飾(abstract修飾的是抽象類,抽象類是用于被子類繼承的,和final起相反的作用);final修飾的方法不能被重寫,但是子類可以用父類中final修飾的方法;final修飾的成員變量是不可變的,如果成員變量是基本數(shù)據(jù)類型,初始化之后成員變量的值不能被改變,如果成員變量是引用類型,那么它只能指向初始化時指向的那個對象,不能再指向別的對象,但是對象中的內(nèi)容是允許改變的。
Finally:是在異常處理時提供finally塊來執(zhí)行任何清除操作。不管有沒有異常被拋出、捕獲都會被執(zhí)行。try塊中的內(nèi)容是在無異常時執(zhí)行到結(jié)束。catch塊中的內(nèi)容,是在try塊內(nèi)容發(fā)生catch所聲明的異常時,跳轉(zhuǎn)到catch塊中執(zhí)行。finally塊則是無論異常是否發(fā)生都會執(zhí)行finally塊的內(nèi)容,所以在代碼邏輯中有需要無論發(fā)生什么都必須執(zhí)行的代碼,可以放在finally塊中。
finalize:是方法名,java技術(shù)允許使用finalize()方法在垃圾收集器將對象從內(nèi)存中清楚出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調(diào)用的,它是在Object類中定義的,因此所有的類都繼承了它。子類覆蓋finalize()方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize()方法是在垃圾收集器刪除對象之前對這個對象調(diào)用的。
更多關(guān)于“Java培訓(xùn)”的問題,歡迎咨詢千鋒教育在線名師。千鋒已有十余年的培訓(xùn)經(jīng)驗,課程大綱更科學(xué)更專業(yè),有針對零基礎(chǔ)的就業(yè)班,有針對想提升技術(shù)的好程序員班,高品質(zhì)課程助理你實現(xiàn)java程序員夢想。