當try和finally中都有return的時候,結果是什麼?
阿新 • • 發佈:2019-02-15
先亮一道面試
public static int func (){
try{
return 1;
}catch (Exception e){
return 2;
}finally{
return 3;
}
}
下面函式的返回值是什麼?
答案是:3
這一題,一定要注意的是finally中的語句一定會執行。所以執行到finally裡面的return語句就會return3。而在try中遇到return 2;的時候只是先快取起來等待finally執行完,然後直接把快取的資料return出去。所以,一定要記住,finally中的修改語句不會影響到try和catch中return已確定的返回值。
就上面的黑體字再舉一個例子:
public class Demo2 {
int num = 0;
public int fun() {
try {
return ++num;
} catch (Exception e) {
return 2;
} finally {
++num;
}
}
public static void main (String[] args) {
Demo2 demo2 = new Demo2();
int a = demo2.fun();
System.out.println(a);
}
}
這段程式碼的輸出語句很容易受到上面那段程式碼的影響,大家可能認為結果是2,然而正確結果是1。正如前面那句黑體字說的,finally語句不會影響到finally中的return語句已經確定的返回值。
那麼下面這段程式碼呢???
public class Demo2 {
int num = 0;
public int fun() {
try {
return ++num;
} catch (Exception e) {
return 2;
} finally {
//System.out.println(num);
return ++num;
}
}
public static void main(String[] args) {
Demo2 demo2 = new Demo2();
int a = demo2.fun();
System.out.println(a);
}
}
這個結果是2,和上面的又不一樣了是吧。這裡大家不用犯暈,很容易理解的,就是在try中的return語句是把num變成了1,而finally中就把num又加了一次就變成 2 然後返回了。
其實可以在finally中加一個輸出語句輸出一下finally就可以明白了。