final、finally、finalize的區(qū)別

最近打算跳槽,讀了一下極客時(shí)間的java核心技術(shù)36講,感覺(jué)還不錯(cuò),就此做個(gè)筆記(感興趣的也可以點(diǎn)擊購(gòu)買(mǎi)鏈接http://stuq.com/a/100nJ,非廣告推廣)。本文所有內(nèi)容,摘自https://time.geekbang.org/column/article/6906筆記,侵刪

簡(jiǎn)要介紹

final:可以修飾類,方法,變量。修飾的類不能繼承,方法不能重寫(xiě),變量不能更改
finally:保證重點(diǎn)代碼一定執(zhí)行,經(jīng)常用于try-catch語(yǔ)句,最后關(guān)閉連接等操作
finalize:保證對(duì)象被回收之前完成特定資源的回收,在java9中已經(jīng)廢棄掉了,因?yàn)闊o(wú)法保證它的執(zhí)行時(shí)間,利用try-catch-finally是比較好的回收資源處理機(jī)制,如果還需要其他的,可以考慮使用cleaner

final

final修飾的對(duì)象不是Immutable(不可變對(duì)象),舉個(gè)例子:

final List<String> list = new ArrayList();
list.add("aa");
list.add("bb");
List<String> immutableList = List.of("aa");
immutableList.add("bb")

final修飾的list只是引用,不被賦值。不會(huì)影響到對(duì)象的行為,而下面的immutableList,后面添加的"bb"不回被加入到集合當(dāng)中。要想真正實(shí)現(xiàn)對(duì)象不可變要注意一下幾點(diǎn):
1.類要用final修飾
2.成員變量定義為private和final,而且不要實(shí)現(xiàn)setter方法
3.如果在構(gòu)造函數(shù)中成員變量,要進(jìn)行深度拷貝

finalize

finalize的執(zhí)行適合垃圾收集關(guān)聯(lián)在一起的,一旦實(shí)現(xiàn)了非空的finalize方法,就會(huì)導(dǎo)致相應(yīng)對(duì)象回收程指數(shù)級(jí)變慢

finally

列幾個(gè) fianlly 不會(huì)被執(zhí)行的情況:

  1. try-cach 異常退出。
    try{
    system.exit(1)
    }finally{
    print(abc)
    }

  2. 無(wú)限循環(huán)
    try{
    while(ture){
    print(abc)
    }
    }finally{
    print(abc)
    }

  3. 線程被殺死
    當(dāng)執(zhí)行 try,finally 的線程被殺死時(shí)。finally 也無(wú)法執(zhí)行。

總結(jié)
1,不要在 finally 中使用 return 語(yǔ)句。
2,finally 總是執(zhí)行,除非程序或者線程被中斷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容