最近打算跳槽诸典,讀了一下極客時(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:可以修飾類(lèi)互墓,方法,變量宋欺。修飾的類(lèi)不能繼承轰豆,方法不能重寫(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.類(lèi)要用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í)行的情況:
try-cach 異常退出。
try{
system.exit(1)
}finally{
print(abc)
}無(wú)限循環(huán)
try{
while(ture){
print(abc)
}
}finally{
print(abc)
}線(xiàn)程被殺死
當(dāng)執(zhí)行 try斤富,finally 的線(xiàn)程被殺死時(shí)膏潮。finally 也無(wú)法執(zhí)行。
總結(jié)
1满力,不要在 finally 中使用 return 語(yǔ)句焕参。
2,finally 總是執(zhí)行油额,除非程序或者線(xiàn)程被中斷叠纷。