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语句覆盖。

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

发布了40 篇原创文章 · 获赞 33 · 访问量 3456

猜你喜欢

转载自blog.csdn.net/qq_40275740/article/details/104086698