try catch finally包含return语句的情况汇总

先来2个真理(或者说是1个):       

        1.无论什么情况,finally代码块中的语句都会执行

        2.即使try或者catch中含有return语句,finally代码块中的语句依然会执行。

 

带着疑问进行:

        return的意思是返回数据并退出,那么在这3个代码块中添加return会出现怎样的情况呢?执行顺序是怎样的呢?

        首先,try和catch中的return肯定不会同时执行,那么当try或者catch中含有return,同时finally也含有return时,最终将执行哪一个return语句呢?

        下面对try和finally同时含有return的情况进行测试。

输出结果:

        可见,main方法输出的值是finally语句块的返回值,所以,当try中和finally同时有return语句时,最终会执行finally中的return。理论上执行完finally语句块会回到try中执行return,但是因为finally中的return让程序提前退出,因此导致了try中的return失效。当然,finally中不建议这么写,否则程序会提前退出。

 

情况总结:

情况1:try{} catch(){}finally{} return;
            程序按顺序执行。
情况2: try{ return; }catch(){} finally{} return;
         (1) 程序执行try块中return之前(包括return语句中的表达式运算)代码;
         (2)执行finally块;(3)执行try中return;
         (4)最后的语句return,但是程序在try中已经return所以不再执行
情况3: try{ } catch(){return;} finally{} return;
         (1)执行try代码块
         有异常:(2)则执行catch中return之前(包括return语句中的表达式运算)代码;(3)执行finally语句块
                     (4)执行catch块中return.;(5)同上末尾的return不再执行。
         无异常:(2)finally语句块(3)执行末尾的return.
情况4: try{ return; }catch(){} finally{return;}
          (1)try块中return之前(包括return语句中的表达式运算)代码;
          (2)执行finally块,因为finally块中有return所以提前退出(正是上面测试的那种情况)。
情况5: try{} catch(){return;}finally{return;}
          (1)执行catch块中return之前(包括return语句中的表达式运算)代码;
          (2)执行finally块,因为finally块中有return所以提前退出。
情况6: try{ return;}catch(){return;} finally{return;}
          (1)执行try块中return之前(包括return语句中的表达式运算)代码;
          有异常:(2)执行catch块中return之前(包括return语句中的表达式运算)代码;
                       (3)执行finally块,因为finally块中有return所以提前退出。
          无异常:(2)执行finally块,因为finally块中有return所以提前退出。

 

如有疑问,可以自行测试,欢迎与我交流。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值