Java之finally关键字的面试题

1.final,finally和finalize的区别

final:修饰类时,不能被继承。

          修饰方法时,不能被重写。

          修饰变量时,只能赋值一次。

finally:是try语句中的一个语句体,不能单独使用,用来释放资源。

finalize:是一个方法,当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

2.如果catch里面有return语句,请问finally的代码还会执行吗?如果会,请问是return前还是return后?

   解答:还会执行,是在return后。如果catch里面有return语句,此时会先执行return将返回值打包并创建一个返回路径等待,接着往下搜寻有没有finally语句,如果有则需先执行完finally后,再根据已经创建好的返回路径返回。

①比较好理解的一种演示

输出结果:

②比较难理解的一种演示

输出结果:20

解释:此处之所以说难理解是因为很多人认为finally中又把30赋值给i了,所以按照顺序应该返回的是30才对,实则并不是。在程序执行catch遇到return时i的值为20,所以此时会将20打包好并且创建一条返回路径等待将打包好的20返回,而finally则是将内存中i变量的值改变成30,但是return返回的20早已经被打包好等待返回,所以并不受finally中i的变化影响。

注意:千万不要在finally内写return 返回语句,因为finally是只要JVM不结束就一定会执行的,那么在try和catch中写的return语句就会毫无意义,因为会被finally的return语句覆盖。

觉得有用的小伙伴请点赞、评论或收藏一下多支持支持博主小弟,跪安~~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值