java坑之finally和return

finally和return

当我们在定义一个方法,使用try...catch...finally以及return的时候,什么时候执行finally和return??代码如下:

public class T {

    static StringBuilder test(){
        StringBuilder s = new StringBuilder();
        s.append("1");
        try{
            s.append("2");
            return s;
        }catch (Exception e){
            s.append("3");
            return s;
        }finally {
            s.append("4");
        }
    }

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

我们直接在开头给上答案:

  • 首先进入try执行代码
  • 假如没有异常,则暂时不执行return(即使try里面有return)
  • 有异常则进入catch,执行代码,遇到return也先不执行
  • 进入finally,执行完代码后,执行之前的return

因此最终输出的结果为:

124

而并不是想象中的:

12

我们稍微改一下代码,更加直观一点:

public class T {

    static String test(){

        try{
            System.out.println("执行try代码");
            return "返回try代码结果";
        }catch (Exception e){
            System.out.println("执行catch代码");
            return "返回catch代码结果";
        }finally {
            System.out.println("执行finally代码");
        }
    }

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

输出结果:

执行try代码
执行finally代码
返回try代码结果

可以看到,finally先于return执行!这是一个小小的坑!

你可能感兴趣的:(java开发基础,finally,return)