打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
你看这代码最后输出值多少?
userphoto

2022.08.02 广东

关注
作为一名java程序员,在求职面试时,时常会遇到我们平时很少留意的题目。类似这样的题目在平时实际开发中我们很少留意,而面试时出现这样的问题,一般是考察求职者的基础是否扎实。
小编以前面试时,就遇到这样一个问题:
try-catch-finally 中,如果catch 中 return 了,finally 还会执行吗?
很显然,答案是肯定会执行,在 return 前执行。
我们写个简单例子来验证下
 1public class FinallyTest {
2 public static void main(String[] args{
3    int k = getResult();
4    System.out.println("k值:" + k);
5
6    k = getResult2();
7    System.out.println("k值:" + k);
8
9}
10
11public static int getResult({
12    int k = 10;
13    try {
14        k = 100 / 0;
15    } catch (Exception ex) {
16        return k;
17    } finally {
18        k = 30;
19    }
20    return k;
21}
22
23public static int getResult2({
24    int k = 10;
25    try {
26        k = 100 / 0;
27    } catch (Exception ex) {
28        return k;
29    } finally {
30        k = 30;
31        return k;
32    }
33  }
34}  

在16行中

  1. 这里return 10,返回路径已生成
  2. 但发现后面还有finally,于是继续执行finally的内容,k=30
  3. 再次回到步骤1,继续走return 10,形成返回路径之后,这里的k就不是变量k,而是常量10
在31行中
  • 如果在finally,又重新形成了一条返回路径,由于只能有1个return返回,所以直接返回30
最后输出的结果是:
k值:10
k值:30
关于在finally块中使用return,在 阿里巴巴Java开发手册-异常处理 有这样的描述:
因为如果存在 finally 代码块,try中的 return 语句执行成功后,并不会立马返回调用者,而是继续执行finally块中的语句,如果此处存在return语句,(立即结束语句)的优先级最高,程序会优先返回finally语句块中的立即结束语句的结果,此时try-catch语句块中的return/抛出异常,程序员结束。很显然,在 finally 中返回或者修改返回值会对程序造成很大的困扰。

总结:

在平时编写代码时,要避免在 finally 语句块中使用 return 语句。
由于笔者水平有限,文中纰漏之处在所难免,权当抛砖引玉,不妥之处,请大家批评指正。

作者:洪生鹏  技术交流、媒体合作、品牌宣传请加作者微信: hsp-88ios

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java学习笔记---异常学习 5-30
含有return 的try catch finally的执行顺序!
Java中try catch finally语句中含有return语句的执行情况(总结版)...
try与finally块中return的问题
Java finally 语句到底是在 return 之前还是之后执行?
【一分钟知识】try catch finally执行顺序,final finally finaliz...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服