try catch finally在有return的情況下的執行順序
阿新 • • 發佈:2018-12-12
1、不管有沒有出現異常,finally塊中的程式碼都會被執行;
2、當try和catch中有return時,finally仍然會執行;
3、finally是在return後面的表示式運算後執行的
- 此時會先把要返回的值儲存起來,不管finally中的程式碼做什麼,返回的值不會改變,仍然是之前儲存的值。
4、finally中最好不要使用return,這會使得程式提前退出,返回值不是try或者catch中儲存的返回值。
例如: try{ return; }catch(){} finally{} return;
- 程式執行try塊中return之前(包括return語句中的表示式運算)程式碼;
- 再執行finally塊,最後執行try中return;
- finally塊之後的語句return,因為程式在try中已經return所以不再執行。
測試程式:
public class Test {
public static void main(String[] args) {
System.out.println("main m: " + function1());
}
static int function1() {
int m = 0;
try {
++m;
return function2(m) + m;
} finally {
++m;
System.out.println("finally m: " + m);
}
}
static int function2(int m) {
++m;
System.out.println("function2 m: " + m);
return m;
}
}
執行結果:
function2 m: 2
finally m: 2
main m: 3