关于Java异常一段很有意思的代码

更多技术文章访问本人博客--ss0xt

今天学习了Java的异常,讲到try-catch-finally时,老师演示了一段代码,觉得很有意思,很能反映出其执行的过程,让自己有点绕,特意记录一下。

 


只要代码执行到try代码内部, 不管有没有异常,finally区域的代码都会执行.
即便try代码和catch代码中有return, finally也会执行.
只有一种情况在执行finally代码前,退出虚拟机.
System.exit(1);

--------------------------------------------------------------------------------------------

finally语句和前面的return语句那个先执行? finally先执行. 

 

int i = 10;
try {
     return i++; //i++: 10 i:11  黄色区域,csdn代码加颜色好像有问题。。。。。
} catch (Exception e) {
     e.printStackTrace();
}finally {
     i++; // i:12 蓝色区域
}

 

 

 

 

上面代码返回的是10, i的最终结果: 12

执行步骤:1. 黄色区域的i++先执行,算出表达式的结果, 但是先不return(先“存”起来).2. 执行finally中蓝色区域的i++3. 在执行黄色区域的return.

 

 

int i = 10;
try {
  return i++; //i++: 10 i:11 黄色区域,csdn代码加颜色好像有问题。。。。。

} catch (Exception e) {
   e.printStackTrace();
}finally {
   return i++;//i++:11, i:12 蓝色区域
}

 

 

上面代码返回的是11, 不是10.

执行步骤:1. 黄色区域的i++先执行,算出表达式的结果, 但是先不return.2. 执行蓝色区域的i++计算出表达式的结果,然后return.3. try的return没有执行.

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值