Java面試:final、finally、finalize區別

Java面試:final、finally、finalize區別

請你談談final,finally,finalize之間的區別? 這個問題大概是剛剛步入職場的程序猿,最常見的面試題之一了。

Java面試:final、finally、finalize區別

final

final關鍵字可以用來修飾類,方法以及成員變量,當用在不同的場景下時具有不同的意義。

修飾類

如果修飾類,則代表這個類不可繼承

修飾方法

如果修飾方法,則代表這個方法不可覆寫;同時,允許編譯器將所有對這個方法的調用轉化為inline調用,也就是說,把所有的調用處的方法名全部換為方法主體,這也會使得代碼主體變得異常龐大,非常影響性能。

修飾變量

如果修飾基本類型,則代表該變量的值不可改變。

如果修飾引用類型,則代表該對象的引用不可改變。

finally

finally是用於異常處理時使用的語句,由finally關鍵詞修飾的代碼主體,無論異常是否發生,該代碼塊總會執行。

注意:哪怕try/catch中存在return,finally修飾的代碼塊依然會執行。

具體情況可以如下:

  1. finally中包含return語句,則無論之前try語句中是否包含retrun,都不再執行,只執行finally中的return。

  2. finally中不包含return語句,也沒有改變try中的返回值,則finally中的語句執行完後會繼續執行try中的return。

  3. finally中不包含return語句,但是改變了try中的返回值,則finally中的語句執行完後會繼續執行try中的return,並通過return繼續返回值(此處類似函數調用,如果finally改變的返回值是基本類型,則改變不起作用

    ;如果是引用類型,則finally中對該引用類型的屬性值的改變起作用)。

finalize

finalize是一個方法名,當需要從堆中永久刪除某個對象之前,垃圾回收器會主動調用該對象的finalize()方法。

需要注意的是:

  1. 程序猿無法確定垃圾回收器何時調用該方法(哪怕你明著寫出來,依然無法確定,所以一般程序猿不需要調用該方法)

  2. 無法保證調用不同對象的方法的順序。換句話說如果對象A裡面引用了對象B,則有可能先調用A的finalize()方法,也有可能先調用B的finalize()方法。

最後別忘了點個關注哦~以後還會繼續推送別的技術文章~

Java面試:final、finally、finalize區別


分享到:


相關文章: