未处理的方法的异常和代码编译成功

时间:2017-04-01 17:23:15

标签: java exception-handling

public class ExceptionDemo {

    public static void main(String...args) {
        try {
            bar();
        } catch (NullPointerException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

        foo();
    }

    public static void bar() {

    }

    public static void foo() throws NullPointerException {

    }
}

请解释为什么即使我们没有处理foo()方法异常,此代码也会成功编译。

3 个答案:

答案 0 :(得分:2)

在java中我们有两个例外,

+--------+----------+------------+--------------------+
|  cust  | user_id  | another_id |     modify_time    | 
+--------+----------+------------+--------------------+
|   cust1|   1      |         222|2017-03-22 07:29    |
|   cust1|   1      |         111|2017-03-22 07:29    |
|   cust2|   2      |         444|2017-03-22 07:29    |
|   cust2|   2      |         333|2017-03-22 07:29    |
+--------+----------+------------+--------------------+

NullPointerException是一个运行时异常,意味着它将在运行时被检查。

这里的示例 Foo()方法通过throws关键字将 NullPointeException 传播给调用方法,所以在编译时它是可以的但是如果不知何故会抛出NullPointerException在运行时,您的代码将会中断。

推荐:您应该通过检查 null 来处理它,而不是通过抛出传播它。

有关详细信息,请查看http://technostepup.com/CoreJava/ExceptionHandling/exception-types.php

答案 1 :(得分:1)

Java中的NullPointerException是一个RuntimeException,因此编译器不会强制您使用try-catch块来适当地处理它。我们不需要使用try catch块来处理运行时异常,但是如果它是像FileNotFoundException那样的编译时异常,那么你需要添加try catch Block。

答案 2 :(得分:0)

在Java中,Exception和Error类是从Throwable类继承的。 Exception和Error类有子类。

如果您的代码抛出异常(RunTimeException除外),则必须捕获此异常。但是,如果您的代码抛出RunTimeException或Error,则不必捕获RunTimeException或Error,但您可以。

检查Throwable,Exception和Exception子类(RunTimeException除外)Exception,因此您必须捕获此异常。

但RunTimeException和Error类是未选中的异常,因此您不必捕获。您应该尝试在运行时不会抛出未经检查的异常。