今天看到一個題,不在電腦執行真的挺難想出結果的,當然如果知道原理的話還是很容易出結果的。下面通過代碼分享給大家。
package com.yxc;
public class TestApp {
public static void main(String[] args) {
int a=test();
int b=test2();
System.out.println(a);
System.out.println(b);
}
public static int test(){
int a=1;
try{
//運行時異常
a=a/0;
//下面的代碼不會被執行
a=2;
}catch (Exception e){
a=3;
return a;
}finally {
a=4;
}
return a;
}
public static int test2(){
int a=1;
try{
//運行時異常
a=a/0;
//下面的代碼不會被執行
a=2;
}catch (Exception e){
a=3;
return a;
}finally {
a=4;
//這裏在finally裏面return
return a;
}
}
}
結果是:
3
4
首先可以確定的是如果在catch中有return語句的話,那麼finally裏面的代碼還是會繼續執行的,第一種情況下,執行到catch時返回3,這時它發現finally裏面還有代碼需要執行,所以就去執行,a=4,但是這個時候它會返回之前返回路徑,也就是return a=3;而finally後面的return 根本不會執行
第二種情況,同樣執行到catch,發現finally裏面有代碼要執行,所以進入finally,在finally裏面有return 語句,這時候直接return 值,所以返回的是4