try ,catch ,finally執行流程

一、若是catch 裏面有return,finally裏面的代碼還會執行嗎?get

  答案:會,在return以前執行。it

例1:finally裏面沒有returnio

  public class TestTryCatch {class

    public static void main(String[] args) {
System.out.println(getInt());
}

public static int getInt() {
int a = 10;
try {
System.out.println(a / 0);
a = 20;
} catch (ArithmeticException e) {
a = 30;
a = catchException(a);
return a+10; //當執行到這裏的時候 return 55 已經準備好了,可是此時 他會去看有沒有finally,若是有,先去執行finally裏面的代碼,
//若是finally裏面有那個return,就直接返回了,try裏面的55就不會返回了。若是finally裏面沒有return,那麼執行完其餘代碼以後,會繼續執行return 55;因此返回結果就是55
} finally {
a = 40;
}
return a;
}

private static int catchException(int a){
return a+15;
}

結果: 55

例2. finally裏面有return
public class TestTryCatch {
public static void main(String[] args) {
System.out.println(getInt());
}

public static int getInt() {
int a = 10;
try {
System.out.println(a / 0);
a = 20;
} catch (ArithmeticException e) {
a = 30;
a = catchException(a);
return a+10; //當執行到這裏的時候,他回去看有沒有finally,若是有,先去執行finally裏面的代碼,
//若是finally裏面有那個return,就直接返回了,a+10就不會執行了。若是沒有,那麼繼續執行以前的
//a+10,此時的a+10中的a=30+15,而不是finally裏面的數字。
} finally {
a = 40;
return a; //這裏直接返回40,因此上面的try裏面的return 55就不會在執行,因此返回結果就是40
}
// return a;
}
private static int catchException(int a){
return a+15;
}
}

3.catch與finally裏面都沒有return
public class TestTryCatch {    public static void main(String[] args) {        System.out.println(getInt());    }    public static int getInt() {        int a = 10;        try {            System.out.println(a / 0);            a = 20;        } catch (ArithmeticException e) {            a = 30;        } finally {            a = 40;        }        return a;    }}結果:40,按順序執行,最後返回40
相關文章
相關標籤/搜索