参见英文答案 >
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是捕获的结果).