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

 

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