try-catch-finally中return的执行情况_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > try-catch-finally中return的执行情况

try-catch-finally中return的执行情况

 2013/8/19 18:42:34  牛仔very的忙  程序员俱乐部  我要评论(0)
  • 摘要:在try中没有异常的情况下try、catch、finally的执行顺序try---finally如果try中有异常,执行顺序是try---catch---finally如果try中没有异常并且try中有return这时候正常执行顺序是try----finally---return如果try中有异常并且try中有return这时候正常执行顺序是try----catch---finally---return总之finally永远执行!try-catch-finally里都没有return
  • 标签:情况 all 执行
try中没有异常的情况下try、catch、finally的执行顺序 try--- finally
如果try中有异常,执行顺序是try--- catch --- finally
如果try中没有异常并且try中有return这时候正常执行顺序是try ----finally --- return
如果try中有异常并且try中有return这时候正常执行顺序是try----catch---finally---return
总之 finally 永远执行!
try-catch-finally里都没有return ,finally 之后有个return,如果try中有异常,finally执行完后,还能执行return吗?那是不可能执行的了,try中有异常以后,根据java的异常机制先执行catch后执行finally,此时错误异常已经抛出,程序因异常而终止,所以你的return是不会执行的 <wbr></wbr> <wbr><wbr><wbr>在存在try-catch-finally的方法中,return可能出现的位置有4个,在try中,在catch中,在finally中,在finally后(try-catch-finally外的语句块)。</wbr></wbr></wbr> <wbr><wbr><wbr>在这4个位置都出现return的情况下(事实上应该是不可能的,如果前面3个位置都存在return,那么最后一个位置的return就成了unreachablecode,编译不会通过),最终会执行的return应该是finally中的return。也就是<strong><span style="color:#0A18FD">finally中的return会覆盖掉其它位置的return</span></strong>。</wbr></wbr></wbr> try中有return语句

-------- try catch finally顺序:
1.try {}.
2.如果有Error Exception则,执行catch(){}中的代码。
3.无论有没有 Error Exception都要执行finally{}中的代码。
4.执行 try 中的 return

catch中有return

<wbr>但当finally中不存在return,而catch中存在return,但finally中的语句又会对catch中的return的值产生影响时,情况就有点复杂。</wbr>

int ret = 0;
try{

    throw new Exception();

    }
catch(Exception e){

    ret = 1;

   return ret;
}
finally{

    ret  = 2;
}
这里finally中没有return,但是将catch中要return的ret赋值为2.那么最后返回的值是1. 为什么? 从调试中可以知道Finally中的赋值语句的确被执行了,而执行完这条finally语句后的下一条语句就是catch中的return,那么为啥返回的是1呢? catch中有return,finally中没有return,return的值在执行finally之前已经确定下来了。 另一个值得注意的是最后的return(位于try-catch-finally外)并没有被执行。
发表评论
用户名: 匿名