为什么异常日志用相同的代码更改打印位置?

时间:2018-11-06 13:05:20

标签: java exception-handling

我正在使用遗留系统并模拟一些行为,因此我尝试了诸如此类的较简单的代码,以了解异常处理(遗留系统使用大量用户异常)。我知道不希望在finally处引发异常,但我的目标是了解当前行为,而不是进行一些改进。

public class ExceptionTest {

  public static void loopUntil10() {
      for (int i = 0; i < 10; i++) {
          if (i == 7) {
              System.out.println("7!");
              throw new NullPointerException("7");
          }
          if (i == 8)
              System.out.println("8");
      }
  }

  @SuppressWarnings("finally")
  public static void main(String[] args) {
      try {
          System.out.println("1");
          ExceptionTest.loopUntil10();
          throw new NullPointerException("2");
      } catch (Exception e) {
          System.out.println("3");
          throw new NullPointerException("4");
      } finally {
          System.out.println("5");
          throw new NullPointerException("6");
      }
  }
}

有了这个,我认为它应该打印

  • 1跟着7!,我认为这并不奇怪
  • 由于将抛出NPE("7"),执行将转到catch块,打印3并抛出NPE("4")
  • 捕获块完成后,最终块将打印5并抛出NPE("6")

尽管我不知道例外7和例外4会发生什么,但它的打印却像计划的那样:

1
7!
3
5
Exception in thread "main" java.lang.NullPointerException: 6
    at ExceptionTest.main(ExceptionTest.java:26)

但是有时候它变得很奇怪:

enter image description here enter image description here

这是怪异的Eclipse行为还是我缺少的某些Java Exception概念? 74异常丢失了吗?我的意思是,某个时候有人追踪到他们吗?

0 个答案:

没有答案