转载

一道无聊又有趣的 try catch 面试题

很多时候bug往往都是出在,我们觉得非常简单,不起眼的基础知识上,年前公司最后一波招人,为年后项目做技术储备,主要招聘对象初中级Java开发,要求也并没有多苛刻,唯一一点基础稍好,快速上手做项目就行。在网上找了几个比较简单的面试题,结果一票应聘者答的惨不忍睹,其中不乏工作6年以上的老猿。

直接来看一下题目,就是在 try catch finally 中放入 return ,来看返回的顺序,这个在日常的代码编写中应该是很常用的了吧?不算是面试造航母~

大概考察了几种情况:一下 i 初始值都是 0

一道无聊又有趣的 try catch 面试题

1、 catch 中有 returnfinally 中的代码会执行吗?

一道无聊又有趣的 try catch 面试题

结果很明显会执行:

一道无聊又有趣的 try catch 面试题

2、 catch 中有 returnfinally 也有 return ,怎么执行?

一道无聊又有趣的 try catch 面试题
结果显示 finally 中的 return 会比 catchreturn

先执行

一道无聊又有趣的 try catch 面试题

前边两个一般问题都不大,接着往下看

3、 catchreturn 变量, finally 对变量做计算,返回结果是啥?

一道无聊又有趣的 try catch 面试题

按照往常的逻辑,输入0 ,经过++i,返回1没毛病呀!

一道无聊又有趣的 try catch 面试题

fuck! 咋是 0 ?

i 赋初值为 0 ,捕获到异常后进入 catchcatch 里有 return ,但是后边还有 finally ,先执行 finally 里的,对 i+1=1 ,然后 return 。那 return 的是 1 ?事实上不是 1 ,而是 0. 为何?

一道无聊又有趣的 try catch 面试题

可以清楚的看到 i=1 ;但是返回的确是 0 ?那说明此i非彼 i ,就是返回的 i 不是这个 i

因为这里是值传递,在执行return前,保留了一个i的副本,值为0,然后再去执行finally,finall完后,到return的时候,返回的并不是当前的i,而是保留的那个副本,也就是0.所以返回结果是0.

4、 catchfinally 同时 return 变量,返回结果又该是啥?

一道无聊又有趣的 try catch 面试题

如果 finally 中有 return 不会走 catch

一道无聊又有趣的 try catch 面试题

总结:

  • catch 中有 return 的情况下, finally 中的内容还是会执行,并且是先执行 finallyreturn

  • 需要注意的是,如果返回的是一个基本数据类型,则 finally 中的内容对返回的值没有影响。因为返回的是 finally 执行之前生成的一个副本。

  • catchfinally 都有 return 时, return 的是 finally 的值。

水文一篇没什么含金量,一点基础知识总结,希望对你们有用

原文  https://juejin.im/post/5e9d0bf0f265da47b04d980d
正文到此结束
Loading...