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