黑马程序员技术交流社区

标题: finally 和 return 执行顺序 [打印本页]

作者: sorryjsy    时间: 2015-12-19 13:44
标题: finally 和 return 执行顺序
下面函数get()的返回值是? 求代码执行过程?
public int get(){
    int a = 0;
    try{
        a ++;
        throw new Exception("");
    }catch(Exception e){
        a++;
        return a;
    }finally{
        a++;
    }
}
作者: schubertw    时间: 2015-12-19 16:02
首先a自增一次为1,然后进入catch,再自增一次为2,然后出现了return a,这里先将a的值缓存起来,再去执行finally中的代码,a自增一次为3,接着回去执行return,而此时return的a是之前缓存的值,所以return回去的还是2
作者: 迷茫不堪的年纪    时间: 2015-12-19 19:13
其实你的疑惑应该在  return  和
作者: sorryjsy    时间: 2015-12-19 21:47
1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
作者: DayBreak    时间: 2015-12-19 21:50
2楼说的好
作者: 谢光智    时间: 2015-12-20 10:39
我也不是太会。求大神解答。
作者: dg216888    时间: 2015-12-22 12:57
return先执行,finally无论什么情况都会执行




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2