3.談?wù)?final驯用、finally脸秽、finalize的區(qū)別

題目:談?wù)?final、finally蝴乔、finalize的區(qū)別记餐?
解析:如題,如果要知道他們之間的區(qū)別薇正,那么我們必須要知道它們每一個是什么意思片酝。

1 .  final

final 可以用于控制成員、方法挖腰,或者是一個類是否可以被覆寫或繼承等功能雕沿,這些特點 final 在 Java 中擁有一個不可或缺的地位,也是學(xué)習(xí) Java時必須要知道和掌握的關(guān)鍵字之一曙聂。

 (1)final 成員

當(dāng)在類中定義變量時晦炊,若在其前面加上 final 關(guān)鍵字,那就是說,這個變量一旦被初始化断国,便是不可改變的贤姆。

  例如:final  String   str = "abc";
       final int  a = 8;

這里的不可改變的意思對基本數(shù)據(jù)類型(如a的值)來說是其值不可變,而對于對象變量(如引用 str )來說是引用不可變稳衬。其初始化可以在兩個地方霞捡,一是其定義處,二是在構(gòu)造函數(shù)中薄疚,二者只能選其一碧信。

還有一種用法是定義方法中的參數(shù)為 final 關(guān)鍵字。對于基本數(shù)據(jù)類型的變量街夭,這樣做并沒有什么實際的意義砰碴,因為基本類型的變量在調(diào)用方法時是傳值的,也就是說板丽,我可以在方法中更改這個參數(shù)變量而不會影響到調(diào)用語句呈枉,然而對于對象變量,卻顯得很實用埃碱,因為對象變量在傳遞時是傳遞其引用的猖辫,這樣,我在方法中對對象變量的修改也會影響到調(diào)用語句中的對象變量砚殿。當(dāng)你在方法中不需要改變作為參數(shù)的對象變量時啃憎,明確使用 final 進行聲明,會防止你無意的修改而影響到調(diào)用方法似炎。

  (2)final 方法

將方法聲明為 final 有兩個原因辛萍。第一就是說明應(yīng)知道這個方法提供的功能滿足要求,不需要進行擴展名党,并且也不允許任何從此類繼承的類來覆寫這個方法叹阔,但是仍然可以繼承這個方法挠轴,也就是說传睹,可以直接使用。第二就是允許編譯器將所有對此方法的調(diào)用轉(zhuǎn)化為 inline(行內(nèi))調(diào)用機制岸晦,例如欧啤,保存斷點、壓棧等(启上?)邢隧,這樣可能會使程序的效率有所有提高。然而冈在,當(dāng)方法的主題非常龐大的時候倒慧,或者在多處調(diào)用此方法時,調(diào)用主體代碼便會迅速膨脹,可能反而影響效率纫谅,所以要慎用 final 進行方法定義炫贤。

  (3)final 類

當(dāng)將 final 用于類時,就需要仔細(xì)考慮付秕,因為一個 final 類是無法被任何人繼承的兰珍,那也就以為著此類在一個繼承樹中是一個葉子類,并且此類的設(shè)計已被人很完美询吴,不需要進行修改或擴展掠河。 對于 final 類中成員,可以定義其為 final猛计,也可以不是 final唠摹。 而對于方法,由于所屬的類為 final 的關(guān)系奉瘤,自然也就成了 final 型的跃闹。也可以明確的給 final 類中的方法加上一個 final ,但這個顯然是沒有意義的毛好。

  2. finally

finally 關(guān)鍵字是對 Java 異常處理模型的最佳補充望艺。finally 結(jié)構(gòu)使代碼總會執(zhí)行,而不管有無異常發(fā)生肌访。使用 finally 可以維護對象內(nèi)部的狀態(tài)找默,并可以清理非內(nèi)存資源。如果沒有 finally 吼驶,我們的代碼就會很費解惩激。

3. finalize

根據(jù) Java 語言規(guī)范,JVM保證調(diào)用 finalize函數(shù)之前蟹演,這個對象是不可達的风钻,但是JVM 不保證這個函數(shù)一定會被調(diào)用。另外酒请,規(guī)范還保證 finalize 函數(shù)最多運行一次骡技。

通常,finalize 用于一些不容易控制羞反,并且非常重要的資源的釋放布朦,例如,一些 I/O 的操作昼窗、數(shù)據(jù)的連接是趴。這些資源的釋放對整個應(yīng)用程序是非常關(guān)鍵的。在這種情況下澄惊,程序員應(yīng)該可以通過程序本身的管理(包括釋放)這些資源為主唆途,以 finalize 函數(shù)釋放資源方式為輔富雅,形成一種雙保險的管理機制,而不是應(yīng)該僅僅依靠 finalize 來釋放資源肛搬。

答案

  1. final 修飾符 (關(guān)鍵字)

如果一個類被聲明為 final 吹榴, 意味著它不能在派生處新的子類,不能作為父類被繼承滚婉。因此图筹,一個類既不能被聲明為 abstract ,又被聲明為 final 让腹。將變量或者方法聲明為 final远剩,可以保證它們在使用中不被改變。其初始化可以在兩個地方:一個是其定義處骇窍,也就是說瓜晤,在 final 變量定義時直接給其賦值;而是在構(gòu)造函數(shù)中腹纳。這兩個地方只能選其一痢掠,要么在定義時給值,要么在構(gòu)造函數(shù)中給值嘲恍,不能同時既在定義時給了值足画,又在構(gòu)造構(gòu)造函數(shù)中給另外的值,而在以后的引用中只能讀取佃牛,不可修改淹辞。被聲明為 final 的方法也同樣只能使用,不能重寫(override)俘侠。

  2. finally

在異常處理時提供 finally 塊來執(zhí)行任何清楚操作象缀。如果跑出一個異常,那么相匹配的 catch 自居就會執(zhí)行爷速,然后控制就會進入 finally 塊 (如果有的話)央星。

 3.finalize

finalize 是方法名。 Java技術(shù)允許使用 finalize() 方法在垃圾收集器將對象從內(nèi)存清除出去前做必要的清理工作惫东。這個方法有垃圾收集器在確定這個對象沒有被引用時對這個對象調(diào)用的莉给。它是在Object 類中定義的,因此凿蒜,所有的類都繼承類它禁谦。子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。 finalize() 方法是在垃圾收集器刪除對象之前對這個對象調(diào)用的废封。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市丧蘸,隨后出現(xiàn)的幾起案子漂洋,更是在濱河造成了極大的恐慌遥皂,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刽漂,死亡現(xiàn)場離奇詭異演训,居然都是意外死亡,警方通過查閱死者的電腦和手機贝咙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門样悟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人庭猩,你說我怎么就攤上這事窟她。” “怎么了蔼水?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵震糖,是天一觀的道長。 經(jīng)常有香客問我趴腋,道長吊说,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任优炬,我火速辦了婚禮颁井,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蠢护。我一直安慰自己蚤蔓,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布糊余。 她就那樣靜靜地躺著秀又,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贬芥。 梳的紋絲不亂的頭發(fā)上吐辙,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音蘸劈,去河邊找鬼昏苏。 笑死,一個胖子當(dāng)著我的面吹牛威沫,可吹牛的內(nèi)容都是我干的贤惯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼棒掠,長吁一口氣:“原來是場噩夢啊……” “哼孵构!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起烟很,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤颈墅,失蹤者是張志新(化名)和其女友劉穎蜡镶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恤筛,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡官还,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了毒坛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片望伦。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖煎殷,靈堂內(nèi)的尸體忽然破棺而出屯伞,到底是詐尸還是另有隱情,我是刑警寧澤蝌数,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布愕掏,位于F島的核電站,受9級特大地震影響顶伞,放射性物質(zhì)發(fā)生泄漏饵撑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一唆貌、第九天 我趴在偏房一處隱蔽的房頂上張望滑潘。 院中可真熱鬧,春花似錦锨咙、人聲如沸语卤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粹舵。三九已至,卻和暖如春骂倘,著一層夾襖步出監(jiān)牢的瞬間眼滤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工历涝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诅需,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓荧库,卻偏偏與公主長得像堰塌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子分衫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法场刑,類相關(guān)的語法,內(nèi)部類的語法丐箩,繼承相關(guān)的語法摇邦,異常的語法恤煞,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 一屎勘、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計...
    子非魚_t_閱讀 4,186評論 1 44
  • (一)Java部分 1施籍、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,104評論 0 62
  • 所有知識點已整理成app app下載地址 J2EE 部分: 1.Switch能否用string做參數(shù)? 在 Jav...
    侯蛋蛋_閱讀 2,432評論 1 4
  • 文丨膜小欣 圖丨花瓣 1. >>>不主動真的會死<<< “反正每次你都說對不起概漱,然后呢丑慎?還要我教你說娶我?主動一...
    膜小欣閱讀 505評論 0 0