一个try、catch、finally的细节场景

public int inc() {
int x;
try {
x = 1;
return x;
} catch (Exception e) {
x = 2;
return x;
} finally {
x = 3;
}
}

①如果没有抛出异常的话,返回值是多少?

②如果抛出Exception异常,返回值是多少?

③如果catch中又抛出异常,返回值是多少?

解释:①1②2③抛异常。因为Java是动态解析和链接的,在正常情况下,也会按照编译后的结果顺序执行,也就是先执行x=1,再执行return(注意这个时候只是把结果入栈,并没有向上层返回),再执行finally的x=3,这个时候只是把方法内局部变量的x值改变,并没有改变栈中的值,最后出栈,把1返回给上层。再执行return的时候,其实会把局部变量考别一份到堆栈中,之后finally的操作并不会影响堆栈中的值,直到方法结束,再把栈顶值拿出来,整个栈的生命周期结束。所以finally只适合做一些清理的工作,比如管理io流,但不能做到对返回值的修改。

转载于:https://my.oschina.net/yu120/blog/549905

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值