美文网首页
java异常处理中的finally与return

java异常处理中的finally与return

作者: 木木点 | 来源:发表于2020-04-08 20:50 被阅读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

    相关文章

      网友评论

          本文标题:java异常处理中的finally与return

          本文链接:https://www.haomeiwen.com/subject/pupxmhtx.html