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

前端之家收集整理的这篇文章主要介绍了java – try / catch / finally的惊人输出?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Behaviour of return statement in catch and finally6个
我运行这段代码
  1. public static void main(String[] args) {
  2. System.out.println(catcher());
  3. }
  4.  
  5. private static int catcher() {
  6. try {
  7. System.out.println("TRY");
  8. thrower();
  9. return 1;
  10. } catch (Exception e) {
  11. System.out.println("CATCH");
  12. return 2;
  13. } finally {
  14. System.out.println("FINALLY");
  15. return 3;
  16. }
  17. }
  18.  
  19. private static void thrower() {
  20. throw new RuntimeException();
  21. }

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

  1. TRY
  2. CATCH
  3. FINALLY
  4. 2

但令人惊讶的是输出是:

  1. TRY
  2. CATCH
  3. FINALLY
  4. 3

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

解决方法

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

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

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

猜你在找的Java相关文章