成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

大廠面試官問你知道final、finally、finalize有什么區(qū)別?

前言
Java程序員面試,基礎(chǔ)真的很重要?;A(chǔ)這東西,各個公司都很看重,尤其是大公司,他們看中人的潛力,他們舍得花精力去培養(yǎng),所以基礎(chǔ)是重中之重。之前很多人問我,項目經(jīng)歷少怎么辦,那就去打牢基礎(chǔ),當(dāng)你的基礎(chǔ)好的發(fā)指的時候,你的其他東西都不重要了。

成都創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,包括成都網(wǎng)站設(shè)計、成都做網(wǎng)站、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營銷策劃推廣、電子商務(wù)、移動互聯(lián)網(wǎng)營銷等。成都創(chuàng)新互聯(lián)為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,成都創(chuàng)新互聯(lián)核心團隊十年專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗,為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。

Java 語言有很多看起來很相似,但是用途卻完全不同的語言要素,這些內(nèi)容往往容易成為面試官考察你知識掌握程度的切入點。
今天,我要問你的是一個經(jīng)典的 Java 基礎(chǔ)題目,談?wù)?final、finally、 finalize 有什么不同?
大廠面試官問你知道final、finally、finalize有什么區(qū)別?
典型回答
final 可以用來修飾類、方法、變量,分別有不同的意義,final 修飾的 class 代表不可以繼承擴展,final 的變量是不可以修改的,而 final 的方法也是不可以重寫的(override)。
finally 則是 Java 保證重點代碼一定要被執(zhí)行的一種機制。我們可以使用 try-finally 或者 try-catch-finally 來進行類似關(guān)閉 JDBC 連接、保證 unlock 鎖等動作。
finalize 是基礎(chǔ)類 java.lang.Object 的一個方法,它的設(shè)計目的是保證對象在被垃圾收集前完成特定資源的回收。finalize 機制現(xiàn)在已經(jīng)不推薦使用,并且在 JDK 9 開始被標(biāo)記為 deprecated。

考點分析
這是一個非常經(jīng)典的 Java 基礎(chǔ)問題,我上面的回答主要是從語法和使用實踐角度出發(fā)的,其實還有很多方面可以深入探討,面試官還可以考察你對性能、并發(fā)、對象生命周期或垃圾收集基本過程等方面的理解。

對于final
推薦使用 final 關(guān)鍵字來明確表示我們代碼的語義、邏輯意圖,這已經(jīng)被證明在很多場景下是非常好的實踐,比如:
我們可以將方法或者類聲明為 final,這樣就可以明確告知別人,這些行為是不許修改的。
如果你關(guān)注過 Java 核心類庫的定義或源碼, 有沒有發(fā)現(xiàn) java.lang 包下面的很多類,相當(dāng)一部分都被聲明成為 final class?在第三方類庫的一些基礎(chǔ)類中同樣如此,這可以有效避免 API 使用者更改基礎(chǔ)功能,某種程度上,這是保證平臺安全的必要手段。
使用 final 修飾參數(shù)或者變量,也可以清楚地避免意外賦值導(dǎo)致的編程錯誤,甚至,有人明確推薦將所有方法參數(shù)、本地變量、成員變量聲明成 final。
final 變量產(chǎn)生了某種程度的不可變(immutable)的效果,所以,可以用于保護只讀數(shù)據(jù),尤其是在并發(fā)編程中,因為明確地不能再賦值 final 變量,有利于減少額外的同步開銷,也可以省去一些防御性拷貝的必要。
final 也許會有性能的好處,很多文章或者書籍中都介紹了可在特定場景提高性能,比如,利用 final 可能有助于 JVM 將方法進行內(nèi)聯(lián),可以改善編譯器進行條件編譯的能力等等。
坦白說,很多類似的結(jié)論都是基于假設(shè)得出的,比如現(xiàn)代高性能 JVM(如 HotSpot)判斷內(nèi)聯(lián)未必依賴 final 的提示,要相信 JVM 還是非常智能的。類似的,final 字段對性能的影響,大部分情況下,并沒有考慮的必要。
從開發(fā)實踐的角度,我不想過度強調(diào)這一點,這是和 JVM 的實現(xiàn)很相關(guān)的,未經(jīng)驗證比較難以把握。我的建議是,在日常開發(fā)中,除非有特別考慮,不然最好不要指望這種小技巧帶來的所謂性能好處,程序最好是體現(xiàn)它的語義目的。如果你確實對這方面有興趣,可以查閱相關(guān)資料,我就不再贅述了,不過千萬別忘了驗證一下。

對于 finally
明確知道怎么使用就足夠了。需要關(guān)閉的連接等資源,更推薦使用 Java 7 中添加的 try-with-resources 語句,因為通常 Java 平臺能夠更好地處理異常情況,編碼量也要少很多,何樂而不為呢。

注意事項
finally代碼不會被執(zhí)行的特例:
大廠面試官問你知道final、finally、finalize有什么區(qū)別?
final修飾的List,不會影響其行為:大廠面試官問你知道final、finally、finalize有什么區(qū)別?

final只能約束strList這個引用不可以被賦值,但是strList對象行為不被final影響,添加元素的操作是完全正常的。如果我們真的希望對象本身是不可變的,那么需要相應(yīng)的類支持不可變的行為。
在上面的例子中,List.of方法創(chuàng)建的就是不可變List,最后那句add會在運行時拋出異常。
Java平臺目前在逐步使用java.lang.ref.Cleaner來替換掉原來的finalize實現(xiàn)。

對于 finalize
我們要明確它是不推薦使用的,業(yè)界實踐一再證明它不是個好的辦法,在 Java 9 中,甚至明確將 Object.finalize() 標(biāo)記為 deprecated!如果沒有特別的原因,不要實現(xiàn) finalize 方法,也不要指望利用它來進行資源回收。
為什么呢?簡單說,你無法保證 finalize 什么時候執(zhí)行,執(zhí)行的是否符合預(yù)期。使用不當(dāng)會影響性能,導(dǎo)致程序死鎖、掛起等。
通常來說,利用上面的提到的 try-with-resources 或者 try-finally 機制,是非常好的回收資源的辦法。如果確實需要額外處理,可以考慮 Java 提供的 Cleaner 機制或者其他替代方法。

本文名稱:大廠面試官問你知道final、finally、finalize有什么區(qū)別?
鏈接URL:http://jinyejixie.com/article36/ppedsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站營銷云服務(wù)器、網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
崇信县| 英超| 桓仁| 汨罗市| 台安县| 宁海县| 筠连县| 贵南县| 香港| 昌邑市| 弥勒县| 鄢陵县| 新巴尔虎右旗| 鄢陵县| 祁连县| 邵武市| 永康市| 永和县| 平凉市| 东平县| 乐都县| 阿城市| 绵阳市| 彰化市| 阿坝| 铜陵市| 资阳市| 福泉市| 察隅县| 黄骅市| 赤峰市| 壶关县| 卢湾区| 正镶白旗| 乌兰察布市| 文山县| 东乡族自治县| 贵溪市| 探索| 谢通门县| 施秉县|