- 假設代碼順序書寫如下:try → catch → finally → 其他代碼
- 則:
- 1、正常執行順序:try → catch → finally → 其他代碼
- 2、try,catch和finally和其他代碼的執行條件:
- 先執行try。
- 只要try中有異常,catch就會執行;
- finally總會執行;
- 其他代碼:
- 如果finally中沒有return:其他代碼會執行;
- 如果finally中有return:其他代碼不會執行;
- 3、方法的返回結果確定:
- finally 有return:(finally中的return)
- 返回結果為 finally 中的值,try(+catch,+ 其他代碼)的 return 值會被覆蓋掉。
注:有return,其他代碼不會執行。所以finally就是最終執行的代碼。故返回結果為 finally 中的值。
- 返回結果為 finally 中的值,try(+catch,+ 其他代碼)的 return 值會被覆蓋掉。
- finally 沒有return:(正常執行順序返回結果)
- 返回結果就是正常代碼執行順序的返回結果。try(+catch,+ 其他代碼)的 return 會被寄存起來。一般 finally 不會修改返回值,除非 finally 修改了該引用指向的實際內存內容。
注:沒有return,其他代碼會執行,finally不是最終執行的代碼。返回結果為正常執行順序的返回結果。
- 返回結果就是正常代碼執行順序的返回結果。try(+catch,+ 其他代碼)的 return 會被寄存起來。一般 finally 不會修改返回值,除非 finally 修改了該引用指向的實際內存內容。
- finally 有return:(finally中的return)
- 參考:
- java 的異常、finally 和 return - wthfeng 的專欄 - CSDN 博客 https://blog.csdn.net/wthfeng/article/details/89329161
- Java 中 try、catch、finally 語句塊的執行順序 - 換了馬甲的小強的博客 - CSDN 博客 https://blog.csdn.net/cockroach02/article/details/80186723
