在java中,为什么自定义异常也应该有一个构造函数,其中arg为' Throwable cause'

时间:2015-05-05 08:15:33

标签: java exception

任何人都可以在定义自定义异常时解释为什么我们应该有类似下面的构造函数:

public MyException(Throwable cause) {
    super(cause);
}

public MyException(String message, Throwable cause) {
    super(message, cause);
}

2 个答案:

答案 0 :(得分:3)

它允许您添加有关抛出该异常的原因的自定义Exception实例信息。

当您捕获一个异常并抛出另一个异常时,它非常有用。

例如:

try {
    ....
}
catch (SomeException ex) {
    throw new MyException ("some message", ex);
}

答案 1 :(得分:1)

正如你的问题中所提到的,应该MyException类实现上述构造函数,Exception类是Throwable的子类但是不是绝对必需的< / strong>只拥有那些构造函数。

您可以使用以下没有public MyException() { super(); } public MyException(String message) { super(message); } 作为参数的构造函数:

MyClass

但是这些构造函数有一个缺点。考虑以下代码假设在课程public static void myMethod() throws MyException{ //Some code } 中:

myMethod()

现在在某些代码中,您可以调用此try{ MyClass.myMethod(); } catch (MyException e){ e.getCause(); } ,如下所示:

e.getCause()

如果您使用构造函数和我的答案中所述的构造函数,null将返回{{1}}。因此很难确定异常的确切原因是什么。