异常处理中的return问题

异常处理中的return问题

先上结论:try中return语句是先于finally块的执行的。

首先我们在try中添加return语句,然后在finally中对return的值进行修改。

public class Test {
          
   
    public static void main(String[] args) {
          
   
        System.out.println("函数返回结果  " + test());
    }
    public static int test(){
          
   
        int x = 999;
        try {
          
   
            System.out.println("try块内的x  " + x);
            return x;
        } finally {
          
   
            System.out.println("finally块:");
            ++x;
            System.out.println("finally块内的x  " + x);
        }
    }
}

运行结果:

从结果顺序可以看出,在执行try中的语句时,当执行到return时,程序会将将要返回的结果暂时存储在该方法栈帧的局部变量中,然后执行finally语句,当程序运行完finally块后,才返回到return代码,将之前存储的返回值取出输出。 因此,finally中对x的改变,不会影响返回结果。

而当我们在finally中添加return语句时

public class Test {
          
   
    public static void main(String[] args) {
          
   
        System.out.println("函数返回结果  " + test());
    }
    public static int test(){
          
   
        int x = 999;
        try {
          
   
            System.out.println("try块内的x  " + x);
            return x;
        } finally {
          
   
            System.out.println("finally块:");
            ++x;
            System.out.println("finally块内的x  " + x);
            return x;
        }
    }
}

执行结果为 由此可见,try中return语句确实是先于finally块的执行的。

不过一般不建议在finally中写return语句,finally块存在的主要目的还是对try块内打开的资源进行回收。

经验分享 程序员 微信小程序 职场和发展