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含有return 的try catch finally的執行順序Java
- 關於Java中try-catch-finally-return的執行順序Java
- Java for迴圈中語句執行的順序Java
- finally語句在return執行之後,return返回之前執行
- for語句執行順序
- return與finally的執行順序的影響(skycto JEEditor)
- 有return的情況下try catch finally的執行順序
- SQL 語句的執行順序SQL
- mySQL 執行語句執行順序MySql
- SQL語句執行順序SQL
- Select語句執行順序
- 面試題思考:try 程式碼塊中含 return 語句時,程式碼執行順序面試題
- [CareerCup] 14.2 Try-catch-finally Java中的異常處理Java
- SQL語句各子句的執行順序SQL
- mysql 中sql語句關鍵字的書寫順序與執行順序MySql
- SQL Server SQL語句執行順序SQLServer
- JavaScript for迴圈語句的執行順序和優化JavaScript優化
- SQL Server中SELECT語句執行順序解析SQLServer
- SQL語句中SELECT語句的執行順序SQL
- SQL 查詢語句的執行順序解析SQL
- Hive SQL語句的正確執行順序HiveSQL
- python異常處理之returnPython
- Java中異常處理和設計Java
- JAVA的異常處理機制(一)——try...catch...finallyJava
- (轉)有return的情況下try catch finally的執行順
- 微軟官方:SELECT語句邏輯處理順序微軟
- 有return的情況下try catch finally的執行順序(最有說服力的總結)
- T-sql語句查詢執行順序SQL
- SQL Select語句邏輯執行順序SQL
- C++程式丟擲異常後執行順序C++
- 處理異常時,在catch中return會怎麼樣?
- Java的finally語句Java
- try-catch-finally,被你忽略掉的執行順序
- sql語句執行順序與效能優化(1)SQL優化
- Java 中的異常處理機制Java
- 深度解析Java執行緒池的異常處理機制Java執行緒
- Java中如何保證執行緒順序執行Java執行緒
- 一個 MySQL sql 語句執行順序帶來的 bugMySql