finally面试注意两点

finally必然执行

try{}
catch{}
finally{}
先是执行try中的代码,如果遇上异常则之执行catch中代码,而finally是必然执行的,除了以下几点finally不执行:

  • 1、电脑突然停电,电脑死机,硬件设备坏了
  • 2、在try或者catch中有终止程序运行的的代码,例如:System.exit(0);退出程序运行

finally修改try或者catch中return的结果

  • 1、前面返回的是对象的引用,然后finally修改的是对象的变量值,此时结果return 的是28。因为return的是对象引用,引用储存在栈当中,在return p;执行过程中会保存当前需要return的值,在这里是p(也就是对象引用),并且return途中会执行finally里的代码,然后修改了p.age的值等于28,这个p.age储存在堆当中,并没有对return 的返回值造成影响,所以p.age成功被修改了

在这里插入图片描述

  • 2、return 的是一个基本数据类型,那么由于基本数据类型是储存在栈当中,所以在try{return a}时,return会保存这个return的值也就是a=10;然后在执行finally a=20;虽然此时a变成了20,但是我们return的值是之前保存的那个a=10,所以最后a=10;
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值