請你談談final,finally,finalize之間的區別? 這個問題大概是剛剛步入職場的程序猿,最常見的面試題之一了。
final
final關鍵字可以用來修飾類,方法以及成員變量,當用在不同的場景下時具有不同的意義。
修飾類
如果修飾類,則代表這個類不可繼承
修飾方法
如果修飾方法,則代表這個方法不可覆寫;同時,允許編譯器將所有對這個方法的調用轉化為inline調用,也就是說,把所有的調用處的方法名全部換為方法主體,這也會使得代碼主體變得異常龐大,非常影響性能。
修飾變量
如果修飾基本類型,則代表該變量的值不可改變。
如果修飾引用類型,則代表該對象的引用不可改變。
finally
finally是用於異常處理時使用的語句,由finally關鍵詞修飾的代碼主體,無論異常是否發生,該代碼塊總會執行。
注意:哪怕try/catch中存在return,finally修飾的代碼塊依然會執行。
具體情況可以如下:
finally中包含return語句,則無論之前try語句中是否包含retrun,都不再執行,只執行finally中的return。
finally中不包含return語句,也沒有改變try中的返回值,則finally中的語句執行完後會繼續執行try中的return。
finally中不包含return語句,但是改變了try中的返回值,則finally中的語句執行完後會繼續執行try中的return,並通過return繼續返回值(此處類似函數調用,如果finally改變的返回值是基本類型,則改變不起作用;如果是引用類型
finalize
finalize是一個方法名,當需要從堆中永久刪除某個對象之前,垃圾回收器會主動調用該對象的finalize()方法。
需要注意的是:
程序猿無法確定垃圾回收器何時調用該方法(哪怕你明著寫出來,依然無法確定,所以一般程序猿不需要調用該方法)
無法保證調用不同對象的方法的順序。換句話說如果對象A裡面引用了對象B,則有可能先調用A的finalize()方法,也有可能先調用B的finalize()方法。
最後別忘了點個關注哦~以後還會繼續推送別的技術文章~