捕获运行时异常?

时间:2013-12-18 05:27:31

标签: java exception

我知道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);
            }
        }
    }

谢谢!

2 个答案:

答案 0 :(得分:10)

enter image description here

扩展Exception类不会使它成为Runtime Exception。见上图。您还可以使用多态引用(超类)来捕获子类Exception。它反过来不起作用。

答案 1 :(得分:5)

这是因为CustomException不是RuntimeException的超类。因为你抛出的RuntimeException不是CustomException的子类,所以catch块没有捕获它。