关于Java中try...catch...finally的面试题
关于Java中try…catch…finally的面试题
一、问题
try...catch...finally
二、解答
1)try
中间有返回值,那么finally
还执行吗
finally
中的代码块都会执行,不管try
中有没有return
,也不管有没有出现异常。
这个大家都知道,通常这个finally
关键字,都是用来释放资源的,比如关闭流。
2)如果try
中间有return
返回,finally
中间也有,会发生什么
这个问题有点困扰,平常我们不会这样写代码,正如上面说的,我们通常是用来释放资源的。
但如果在finally
出现了return
代码,应该知道将会出现什么样的结果。
注意看下面这段代码
1 | package com.banmoon.finallytest; |
在心中想一想它俩的答案,我这边直接放出来了
这就说明,如果finally
当中有返回的话,那将以finally
的返回值为准。
那么
finally
执行的时间点是什么时候??是这样子的,当上面的代码块进行
return
时,会将这个返回值保存起来,先去执行finally
中的代码。如果
finally
中有return
,那就会替换掉上面保存的返回值,以finally
的返回值为准
3)如果try
中间有return
返回一个变量,在finally
中修改这个变量,会发生什么
我们将上面代码中的return
注释掉,只保留上面的两个return
,如下
1 | package com.banmoon.finallytest; |
可以看到,改变变量值并不能改变,上面return
时保存下来的值
三、最后
我是半月,你我一同共勉!!!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 半月无霜!
评论
ValineDisqus