首页 > 编程语言 > 详细

【Java】finally执行顺序及对return返回值的影响

时间:2021-05-08 10:11:31      阅读:13      评论:0      收藏:0      [点我收藏+]

finally执行顺序

1.try中有return

try中有return,finally依旧可以执行,且先执行finally语句再return

try {
   return 1;
} finally {
   System.out.println("finally");
}
2.catch中有return

catch中有return,finally依旧可以执行,且先执行finally语句再return

try {
   //制造异常
   int i = 0 / 0;
   return 0;
} catch (Exception e) {
   return 1;
} finally {
   System.out.println("finally");
}
3.finally中有return

finally中如果有return,就会直接返回,会忽略try/catch中的return

try {
   //制造异常
   int i = 0 / 0;
   return 0;
} catch (Exception e) {
   return 1;
} finally {
   System.out.println("finally");
   return 2;
}

总结:

程序在try/catch中碰到return时,知道自己命不久矣,就会先跳到finally,然后就返回。

finally是否会影响返回值

finally先执行再return,那么究竟finally会不会影响return的返回值呢?

1.finally中修改返回的基本数据类型变量 –> 不影响
//catch中的return结果同样
public static int a() {
    int i = 0;
    try {
        i = 99;
        return i;
    } finally {
        i++;
        //i = 3;
    }
}

运行结果为 99

2.finally中修改返回的String –> 不影响
//catch中的return结果同样
public static String a() {
    String s = "0";
    try {
        s = "1";
        return s;
    } finally {
        s += "2";
        //s = "12";
    }
}

运行结果为 1

3.finally中修改返回的引用类型变量 –> 影响
public static StringBuilder a() {
    StringBuilder s = new StringBuilder("0");
    try {
        s.append("123");
        return s;
    } finally {
        s.append("456");
    }
}

运行结果为 0123456

【Java】finally执行顺序及对return返回值的影响

原文:https://www.cnblogs.com/Zeiion/p/14743276.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!