为什么这个java代码没有捕获所有异常

时间:2015-02-18 15:25:30

标签: java exception

我不明白为什么这段代码只抛出NullPointerException。

(有System.getProperty("")代码抛出IllegalArgumentExceptionx=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

2 个答案:

答案 0 :(得分:1)

当抛出第一个异常时,代码退出到catch块,并且不会在try块中执行剩余的代码

答案 1 :(得分:1)

这不是Java中异常处理的工作原理。抛出异常会传播到调用堆栈中的第一个符合条件的catch块,在这种情况下是catch Exception(..)块。块运行后,执行将在catch底部处继续执行。

在抛出Exception的行之后的行上继续执行是没有意义的。您无法保证对象状态,这会使调试变得更加困难。但是你不应该使用异常处理作为流量控制。有关详细信息,请参阅此处:http://c2.com/cgi/wiki?DontUseExceptionsForFlowControl