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

原创 2015年11月18日 21:10:16
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是不会执行的
 
    在存在try-catch-finally的方法中,return可能出现的位置有4个,在try中,在catch中,在finally中,在finally后(try-catch-finally外的语句块)。
    在这4个位置都出现return的情况下(事实上应该是不可能的,如果前面3个位置都存在return,那么最后一个位置的return就成了unreachable code,编译不会通过),最终会执行的return应该是finally中的return。也就是finally中的return会覆盖掉其它位置的return
try中有return语句

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

catch中有return

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

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外)并没有被执行。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

在try中没有异常的情况下try、catch、finally的执行顺序 try--- finally 如果try中有异常,执行顺序是try--- catch --- finally 如果try中没...

Java中try catch finally语句中含return语句的执行情况总结-编程陷阱

前言:有java编程基础的人对java的异常处理机制都会有一定了解,而且可能感觉使用起来也比较简单,但如果在try catch finally语句块中遇到return语句,开发者可能就会遇到一些逻辑问...

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

public  void foo(int i) {         try{             if(i==1){  ...

Java中try catch finally语句中含有return语句的执行情况(总结版)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/17485221     在这里看到了try catch finally块中...

Java中try catch finally语句中含有return语句的执行情况(总结版)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/17485221     在这里看到了try catch finally块中...

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

在try中没有异常的情况下try、catch、finally的执行顺序 try --- finally 如果try中有异常,执行顺序是try --- catch --- finally 如果t...

Java中try catch finally语句中含有return语句的执行情况(总结版)

转自http://www.2cto.com/kf/201312/267879.html在这里看到了try >但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果fi...

Java中try catch finally语句中含有return语句的执行情况(总结版)

在这里看到了try catch finally块中含有return语句时程序执行的几种情况,但其实总结的并不全,而且分析的比较含糊。但有一点是可以肯定的,finally块中的内容会先于try中的ret...

try catch finally语句中含有return语句的执行情况

1 try中有return,finally中没有return public class Test { public static void main(String[] args) { S...

Java中try catch finally语句中含有return语句的执行情况(总结版)

在这里看到了try catch finally块中含有return语句时程序执行的几种情况,但其实总结的并不全,而且分析的比较含糊。但有一点是可以肯定的,finally块中的内容会先于try中的ret...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)