有Return情况下的try catch finally执行顺序

来源:互联网 发布:设置数据的有效范围 编辑:程序博客网 时间:2024/05/22 01:41

情况一:try{} catch(){} finally{} return;
程序按正常顺序执行。

情况二:try{return} catch(){} finally{} return;
程序先执行try块中return之前的代码,再执行finally块中的代码,最后执行try块中的return。需要注意的是finally块中的代码无法影响try块中的return值,比如说:

    private int i;    private int test() {        try {            i++;            return i;        } catch (Exception e) {            e.printStackTrace();            return i;        } finally {            i++;        }    }

即使在final块中执行了i++,但并不会影响try块中的返回值,即test方法返回1,但此时i=2。

情况三:try{ return } catch(){} finally{return}
程序执行try块中return之前(包括return语句中的表达式运算)代码,再执行finally块,因为finally块中有return所以提前退出,而不会执行try块中return。编译器把finally中的return实现为一个warning。

除此之外,在catch块中return以及有异常的情况下,也是同样的道理。

总结
任何执行try块或者catch块中的return语句之前,都会先执行finally语句, 如果finally中有return语句,那么就直接return了,不去执行try 块或者catch块中的return;如果finally块没有return语句,finally块是无法影响try块或者catch块中的return值的。

阅读全文
2 0
原创粉丝点击