我不明白为什么这段代码只抛出NullPointerException。
(有System.getProperty("")
代码抛出IllegalArgumentException
和x=x/0;
抛出ArithmeticException: / by zero
,但在第一个语句中抛出异常而忽略其他异常)
public static void main(String[] a) {
try {
String current = System.getProperty(null);
String current2 = System.getProperty("");
int num=2;
num=num/0;
System.out.println(String.valueOf(num));
}
catch(Exception e){
System.out.println(e.toString());
}
int i = 0;
while (i < 10) {
i++;
System.out.println(i);
}
/**/
}
为什么在评估所有表达式并打印出异常之前,代码执行才会继续?
输出结果为:
java.lang.NullPointerException: key can't be null
1
2
3
4
5
6
7
8
9
10
答案 0 :(得分:1)
当抛出第一个异常时,代码退出到catch块,并且不会在try块中执行剩余的代码
答案 1 :(得分:1)
这不是Java中异常处理的工作原理。抛出异常会传播到调用堆栈中的第一个符合条件的catch
块,在这种情况下是catch Exception(..)
块。块运行后,执行将在catch
的底部处继续执行。
在抛出Exception
的行之后的行上继续执行是没有意义的。您无法保证对象状态,这会使调试变得更加困难。但是你不应该使用异常处理作为流量控制。有关详细信息,请参阅此处:http://c2.com/cgi/wiki?DontUseExceptionsForFlowControl