1.8 finally和return的执行顺序
在 Java 的異常處理中,try、catch 和 finally 是按順序執(zhí)行的。
- 如果 try 中沒有異常,則順序為 try→finally,
- 如果 try 中有異常,則順序為 try→catch→finally。
但是當 try、catch、finally 中加入 return 之后,return 和 finally 的執(zhí)行順序讓很多人混淆不清。下面來分別說明一下。
1. try 和 catch 中帶有 return
1)try 中帶有 return,先是finally,再是try里的return
public class tryDemo {public static int show() {try {return 1;} finally {System.out.println("執(zhí)行finally模塊");}}public static void main(String args[]) {System.out.println(show());} }輸出結果如下:
執(zhí)行finally模塊 12)try 和 catch 中都帶有 return ,先是finally,再是catch
public class tryDemo {public static int show() {try {int a = 8 / 0;return 1;} catch (Exception e) {return 2;} finally {System.out.println("執(zhí)行finally模塊");}}public static void main(String args[]) {System.out.println(show());} }輸出結果為:
執(zhí)行finally模塊 2當 try 代碼塊或者 catch 代碼塊中有 return 時,finally 中的代碼總會被執(zhí)行,且 finally 語句 return 返回之前執(zhí)行
2. finally 中帶有 return**,先是finally,再是finally的return
public class tryDemo {public static int show() {try {int a = 8 / 0;return 1;} catch (Exception e) {return 2;} finally {System.out.println("執(zhí)行finally模塊");return 0;}}public static void main(String args[]) {System.out.println(show());} }輸出結果如下:
執(zhí)行finally模塊 0當 finally 有返回值時,會直接返回該值,不會去返回 try 代碼塊或者 catch 代碼塊中的返回值
注意:finally 代碼塊中最好不要包含 return 語句,否則程序會提前退出。
3. finally 中改變返回值
下面先來看 try 代碼塊或者 catch 代碼塊中的返回值是普通變量時,代碼如下:
返回finally,return的result的值不變
輸出結果為:
執(zhí)行finally模塊 0由輸出結果可以看出,在 finally 代碼塊中改變返回值并不會改變最后返回的內容。
當返回值類型是引用類型時,結果也是一樣的,代碼如下:
public class tryDemo {public static Object show() {Object obj = new Object();try {return obj;} finally {System.out.println("執(zhí)行finally模塊");obj = null;}}public static void main(String args[]) {System.out.println(show());} }輸出結果為:
執(zhí)行finally模塊 java.lang.Object@15db9742當 try 代碼塊或 catch 代碼塊中的 return 返回值類型為普通變量或引用變量時,即使在后面 finally 代碼塊中對返回值的變量重新賦值,也不會影響最后返回的值。
總結為以下幾條:
- 當 try 代碼塊和 catch 代碼塊中有 return 語句時,finally 仍然會被執(zhí)行。
- 執(zhí)行 try 代碼塊或 catch 代碼塊中的 return 語句之前,都會先執(zhí)行 finally 語句。
- 無論在 finally 代碼塊中是否修改返回值,返回值都不會改變,仍然是執(zhí)行 finally 代碼塊之前的值。
- finally 代碼塊中的 return 語句一定會執(zhí)行。
總結
以上是生活随笔為你收集整理的1.8 finally和return的执行顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.7 Java try catch f
- 下一篇: 1.9 Java 9增强的自动资源管理