finally與return執行順序

Java中異常捕獲機制try...catch...finally塊中的finally語句是不是一定會被執行?

不一定,(1)需要執行到try語句中(2)try中如果有System.exit(0)也不會執行,因爲System.exit(0)是終止java虛擬機jvm的,如果虛擬機都停止了,後面的肯定都不會繼續執行
 

try...catch...finally中分別執行順序呢?

public int test() {
        int a = 10;
        try {
            System.out.println("try......");
            return a += 10;
        } catch (Exception e) {
            System.out.println("catch......");
        } finally {
            System.out.println("finally......");
            if (a > 10) {
                System.out.println("finally......a = " + a);
            }
        }
        return 20;
    }
try......
finally......
finally......a = 20

可以看出,先執行try中,return中的語句執行完後再去執行finally語句,finally中執行完後再返回try中的結果。

如果finally中也有return呢,最終會停在哪個裏面的return?

@Test
    public void addition_isCorrect() {
        System.out.println(test());
    }

    public int test() {
        int a = 10;
        try {
            System.out.println("try......");
            return a += 10;
        } catch (Exception e) {
            System.out.println("catch......");
        } finally {
            System.out.println("finally......");
            if (a > 10) {
                System.out.println("finally......a = " + a);
            }
            return a += 20;
        }
    }


try......
finally......
finally......a = 20
40

先執行try語句,包括try中return中部分,但是不返回,繼續執行finally語句,最終停留在finally中的return

 

如果finally中沒有return,但是我更改了數據,最終返回的結果會是什麼呢?

@Test
    public void addition_isCorrect() {
        System.out.println(test());
    }

    public int test() {
        int a = 10;
        try {
            System.out.println("try......");
            return a += 10;
        } catch (Exception e) {
            System.out.println("catch......");
        } finally {
            System.out.println("finally......");
            if (a > 10) {
                System.out.println("finally......a = " + a);
            }
            a = 30;
        }
        return a += 20;
    }


打印------------------------

try......
finally......
finally......a = 20
20

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章