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()
方法异常,此代码也会成功编译。
答案 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类是未选中的异常,因此您不必捕获。您应该尝试在运行时不会抛出未经检查的异常。