java中異常處理finally和return語句的執行順序
- finally程式碼塊的語句在return之前一定會得到執行
- 如果try塊中有return語句,finally程式碼塊沒有return語句,那麼try塊中的return語句在返回之前會先將要返回的值儲存,之後執行finally程式碼塊,最後將儲存的返回值返回,finally程式碼塊雖然對返回值進行修改也不影響返回值,因為要返回的值在執行finally程式碼塊之前已經儲存了,最終返回的是儲存的舊值。
- 如果try塊和finally塊都有返回語句,那麼雖然try塊中返回值在執行finally程式碼塊之前被儲存了,但是最終執行的是finally程式碼塊的return語句,try塊中的return語句不再執行。
- catch塊和try塊類似,會在執行finally程式碼塊執行前儲存返回值的結果,finally語句中有return語句則執行finally的return語句,沒有則執行catch塊中的return語句,返回之前的儲存值。
測試程式碼如下:
public class Main {
public static void main(String[] args) {
System.out.println(test1(0));
System.out.println(test2(0));
System.out.println(test3(0));
System.out.println(test4(0));
}
public static int test1(int b){
try {
b+=10;
return b;
} catch (Exception e) {
e.printStackTrace();
b=-1;
return b;
} finally {
b+=100;
return b;
}
}
public static int test2(int b){
try {
b+=10;
return b;
} catch (Exception e) {
e.printStackTrace();
b=-1;
return b;
} finally {
b+=100;
}
}
public static int test3(int b){
try {
b/=0;
return b;
} catch (Exception e) {
e.printStackTrace();
b=-1;
return b;
} finally {
b+=100;
return b;
}
}
public static int test4(int b){
try {
b/=0;
return b;
} catch (Exception e) {
e.printStackTrace();
b=-1;
return b;
} finally {
b+=100;
}
}
}
test1方法執行finally的return語句,返回110
test2方法執行try的return語句,返回10,雖然finally中對返回值b進行了修改,但是無濟於事,返回的是try中儲存的舊值。
test3方法執行finally中的return語句,返回99。
test4方法執行catch的return語句,返回-1。
相關文章
- [Java基礎]try-catch-finally 和 return 的執行順序Java
- finally語句在return執行之後,return返回之前執行
- Java for迴圈中語句執行的順序Java
- return與finally的執行順序的影響(skycto JEEditor)
- 有return的情況下try catch finally的執行順序
- python異常處理中finally的作用Python
- mysql 語句的執行順序MySql
- SQL 語句的執行順序SQL
- mySQL 執行語句執行順序MySql
- Select語句執行順序
- SQL語句執行順序SQL
- SQL語句各子句的執行順序SQL
- mysql 中sql語句關鍵字的書寫順序與執行順序MySql
- python異常處理之returnPython
- Hive SQL語句的正確執行順序HiveSQL
- SQL 查詢語句的執行順序解析SQL
- JAVA的異常處理機制(一)——try...catch...finallyJava
- (轉)有return的情況下try catch finally的執行順
- try-catch-finally,被你忽略掉的執行順序
- sql語句執行順序與效能優化(1)SQL優化
- 異常-面試題之final,finally和finalize的區別,如果在finally之前有return面試題
- # 關於select關鍵字語句定義順序# 關於select關鍵字語句執行順序
- 處理異常時,在catch中return會怎麼樣?
- 一個 MySQL sql 語句執行順序帶來的 bugMySql
- java exception and finally returnJavaException
- Java 中的異常處理機制Java
- Java 異常處理:使用和思考Java
- SQL語句中的AND和OR執行順序問題SQL
- try...except 語句通常用於捕獲和處理可能在程式碼執行過程中發生的異常
- Java 異常處理Java
- JAVA異常處理Java
- JAVA 異常處理Java
- Java中如何保證執行緒順序執行Java執行緒
- MySQL 查詢常用操作(0) —— 查詢語句的執行順序MySql
- Java中的異常處理最佳實踐Java
- JDK執行緒池異常處理方式JDK執行緒
- java優雅的處理程式中的異常Java
- python:return之後的語句還會執行嗎Python
- JAVA_異常處理Java