final finally finalize區(qū)別?
final修飾一個類 ,這個類不可以被繼承,修飾方法這個方法不可以被重寫,修飾基本數(shù)據(jù)類型(比如int)值不能發(fā)生變更,修飾對象,對象的引用不可以發(fā)生變更。
我理解的類設(shè)置成final,要么這個類是系統(tǒng)運行過程中一個非常重要的類,不希望別人繼承?;蛘哌@個類的代碼已經(jīng)沒有需要改的點了,代碼性能足夠好代碼邏輯足夠完整,這個類不需要優(yōu)化。我也只見過一些JDK或者中間件代碼將類設(shè)置成final,比如String,我理解String是整個Java運行過程最基礎(chǔ)的一個類,如果我可以繼承String,那理論上,底層JDK,類方法入?yún)⑹荢tring的,我繼承實現(xiàn)的類也可以傳進(jìn)去然后運行,如果你繼承String寫的方法沒什么問題還好,有問題整個代碼運行環(huán)境就沒有了,JDK運行都出錯了,那怎么保證用戶代碼邏輯不出問題,還有就是String真的有你需要改的方法嗎?
finally一般是為了釋放資源,比如加鎖釋放鎖邏輯,開始的時候加鎖,方法邏輯完成后釋放鎖。業(yè)務(wù)代碼出現(xiàn)了異常也需要釋放鎖,就可以把釋放鎖的邏輯放到finally中,這樣程序正常運行或者異常都會釋放鎖。
finalize是Object(Object里面有哪些方法有的面試官也會問)的一個方法,調(diào)用這個方法是為了釋放內(nèi)存,讓垃圾收集器回收這部分內(nèi)存。但是是異步,不能保證這個對象會被回收。比如服務(wù)關(guān)閉的時候,調(diào)用這個方法,開個線程異步去回收對象,服務(wù)都關(guān)閉了,線程怎么可能還會運行。
#大廠##面試題目#