加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – try / catch / finally的惊人输出?

发布时间:2020-12-14 05:49:13 所属栏目:Java 来源:网络整理
导读:参见英文答案 Behaviour of return statement in catch and finally6个 我运行这段代码: public static void main(String[] args) { System.out.println(catcher());}private static int catcher() { try { System.out.println("TRY"); thrower(); return 1
参见英文答案 > Behaviour of return statement in catch and finally6个
我运行这段代码:
public static void main(String[] args) {
    System.out.println(catcher());
}

private static int catcher() {
    try {
        System.out.println("TRY");
        thrower();
        return 1;
    } catch (Exception e) {
        System.out.println("CATCH");
        return 2;
    } finally {
        System.out.println("FINALLY");
        return 3;
    }
}

private static void thrower() {
    throw new RuntimeException();
}

我希望在输出中看到这个:

TRY
CATCH
FINALLY
2

但令人惊讶的是输出是:

TRY
CATCH
FINALLY
3

我糊涂了.哪里返回2声明?最后回归是一种糟糕的做法吗?

解决方法

在JSE7语言规范 §14.1 中,返回语句被定义为突然终止.如果您的finally块突然完成(您的返回),则try块以相同的原因结束(如 §14.20.2中所定义):

§14.1
[…]突然完成总是有一个相关的原因,这是下列之一:[…]没有价值的回报[…]具有给定价值的回报[…]

§14.20.2[…]如果finally块因为S而突然完成,则try语句突然完成,原因是S(并且原因R被丢弃). […](原因R是捕获的结果).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读