首先補充聽課心得(二)內容:預設情況在Android Studio中使用try-with-resources會提示Try-with-resources requires API level 19的警告⚠️ ,你需要自己再build.gradle檔案中設定指定JDK版本:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
複製程式碼
問題:
- final、finally、finalize有什麼區別?
這是一道經典的基礎面試題,這裡不作分析,不瞭解的自己Google哦(它們除了字母類似,各自之間沒啥關係,有點類似Java和JavaScript有啥關係了)
補充其他知識點:
- final也許會有效能的好處,比如利用final可能(注意是可能)對效能有好處。比如:可能有助於將方法進行內聯,可以改善編譯器進行條件編譯的能力等等。日常開發中,除非有特別考慮,不然最好不要指望這種小技巧帶來所謂的效能提升。
- 不要在finally中使用return語句,finally總是執行,除非程式或者執行緒被終止。比如以下程式碼:
//try-catch異常退出、不被執行
try{
system.exit(1)
}finally{
println("會被執行嗎?")
}
複製程式碼
//try-catch無線迴圈,不被執行
try{
while(true){
println("do something")
}finally{
println("會被執行嗎?")
}
}
複製程式碼
如果你非要在finally中使用return語句,請注意以下結論:
- finally塊的語句是在try|catch的return語句執行之後,返回之前(try|catch中return在返回前,將其他所有操作都執行完,保留返回的值)。
- finally中return語句會覆蓋try|catch中return語句直接返回。
具體程式碼實踐請參考文章:Java finally語句到底是在return之前還是之後執行? try-catch-finally語句中return的執行順序思考
- final不是immutable。(類似:String為什麼需要final修飾?HashMap、HashSet的鍵值為什麼不要使用不可變型別?)除了immutable內部如何實現的,個人認為主要作用:
- 安全,尤其併發的時候執行緒安全
- 類似String設計成immutable有著一個字串常量池的屬性,這樣存在大量字串的時候,節省記憶體空間、提高效率。具體類似討論可以參考知乎文章:在java中String類為什麼要設計成final?
- 小插曲,對Java的finalizer,cleaner的理解。有興趣可以參考文章:Java的finalizer,cleaner等如何實現? Effective Java 第三版——8. 避免使用Finalizer和Cleaner機制
參考:
- Java finally語句到底是在return之前還是之後執行?
- try-catch-finally語句中return的執行順序思考
- Java的finalizer,cleaner等如何實現?
- Effective Java 第三版——8. 避免使用Finalizer和Cleaner機制
- 極客時間APP核心技術第三講|談談final、finally、finalize有什麼區別?
宣告:此為原創,轉載請聯絡作者
作者:微信公眾號新增公眾號-遛狗的程式設計師 ,或者可以掃描以下二維碼關注相關技術文章。
當然喜愛技術,樂於分享的你也可以可以新增作者微訊號: