Java中try、catch与finally,当try里有return,finally还执行么?

26 阅读1分钟

try catch finally,try里有return,finally还执行么?

执行的,并且finally 的执行会早于try catch 里面的return;

public int getSum(){
    try {
        int sum=10;
        int temp =99;
        return 10+99;
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        System.out.println("我是finally");
    }
    return 0;
    
}
//我是finally
//109

结论:

  1. finally 不管出没出现异常,里面的代码块都是会执行的
  2. 当try 和catch 中有return 的时候,还是会执行的
  3. finally 执行是在return 后面的表达式执行完后执行的,但是还没有具体的把值返回回去,先保存下来,等finally 里面的代码块执行完后,才会返回当时保存的值(不管finally里面的代码怎么执行,都是不会改变最后的保存的返回值的);所以函数的返回值是在finally执行前就确定的
  4. 最好不要在finallly里面执行返回的操作,也就是不要包含return ,否则程序就会提前退出,返回值不是try或者 catch 里面所保存的返回值
 public int getSum(){
        try {
            int sum=10;
            int temp =99;
            return 10+99;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println("我是finally");
            return 100;
        }
​
    }
​
////我是finally
///100     

上面就是返回值丢失成为100了