java异常处理中的finally与return

2020-04-08  本文已影响0人  木木点

首先 finally 中的内容必然会执行(除去停电以及 System.exit(); 等不可控因素)

public class Test {
    public static void main(String[] args)
    {
        try
        {
            System.out.println("Start");
            System.exit(0);

        }finally
        {
            System.out.println("Finally");
        }

        System.out.println("End");
    }
}

输出结果:

Start

那么当finally遇上return呢??

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

    public static int sum() {
        int c = 0;
        try {
            int a = 10;
            int b = 20;
            c = a + b;
            return c;
        } catch (Exception e) {

        } finally {
            c = 100;
        }
        return -1;
    }

}

输出结果:

30

再看另外一个例子:

public class Test {
    public static void main(String[] args) {
        Person p = getAge();
        System.out.println(p.age);
    }

    public static Person getAge() {
        Person p = new Person();
        int c = 0;
        try {
            p.age = 10;
            return p;
        } catch (Exception e) {

        } finally {
            p.age = 20;
        }
        return null;
    }

}

class Person {
    int age;
}

输出结果:

20

什么原因呢?其实是 returnfinally执行之前保存了返回值的引用,例如return 30就是30这个数字对应的引用而return p.age; 保存的就是 p.age的引用,所以在finally中更改c的值不会导致return的值改变,而更改p.age的值会导致return的值发生改变

Gf2z9J.png
上一篇下一篇

猜你喜欢

热点阅读