我正在使用遗留系统并模拟一些行为,因此我尝试了诸如此类的较简单的代码,以了解异常处理(遗留系统使用大量用户异常)。我知道不希望在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)
但是有时候它变得很奇怪:
这是怪异的Eclipse行为还是我缺少的某些Java Exception概念? 7
和4
异常丢失了吗?我的意思是,某个时候有人追踪到他们吗?