我知道Exception catch块可以捕获RunTimeExceptions,如下所示。
public class Test {
public static void main(String[] args) {
try {
throw new RuntimeException("Bang");
} catch (Exception e) {
System.out.println("I caught: " + e);
}
}
}
我有自己创建的异常类,如下所示。
public class CustomException extends Exception {
public CustomException(String message, Throwable cause) {
super(message, cause);
}
public CustomException(String message) {
super(message);
}
}
但是现在不是在catch块中保留Exception,而是保留了CustomException.But运行时异常现在没有被catch块捕获。为什么呢?
public class Test {
public static void main(String[] args) {
try {
//consider here i have some logic and there is possibility that the logic might throw either runtime exception or Custom Exception
throw new RuntimeException("Bang");
} catch (CustomException e) {
System.out.println("I caught: " + e);
}
}
}
谢谢!
答案 0 :(得分:10)
扩展Exception类不会使它成为Runtime Exception。见上图。您还可以使用多态引用(超类)来捕获子类Exception。它反过来不起作用。
答案 1 :(得分:5)
这是因为CustomException
不是RuntimeException
的超类。因为你抛出的RuntimeException
不是CustomException
的子类,所以catch块没有捕获它。