cause及异常链

  • Post author:
  • Post category:其他


异常链,在JDK1.4以后版本中,Throwable类支持异常链机制。Throwable 包含了其线程创建时线程执行堆栈的快照。它还包含了给出有关错误更多信息的消息字符串。最后,它还可以包含 cause(原因):另一个导致此 throwable 抛出的 throwable。它也称为异常链 设施,因为 cause 自身也会有 cause,依此类推,就形成了异常链,每个异常都是由另一个异常引起的。

通俗的说,异常链就是把原始的异常包装为新的异常类,并在新的异常类中封装了原始异常类,这样做的目的在于找到异常的根本原因。

通过Throwable的两个构造方法可以创建自定义的包含异常原因的异常类型:

Throwable(String message, Throwable cause)

构造一个带指定详细消息和 cause 的新 throwable。

Throwable(Throwable cause)

构造一个带指定 cause 和 (cause==null ? null :cause.toString())(它通常包含类和 cause 的详细消息)的详细消息的新 throwable。

getCause()

返回此 throwable 的 cause;如果 cause 不存在或未知,则返回 null。

initCause(Throwable cause)

将此 throwable 的 cause 初始化为指定值。

在Throwable的子类Exception中,也有类似的指定异常原因的构造方法:

Exception(String message, Throwable cause)

构造带指定详细消息和原因的新异常。

Exception(Throwable cause)

根据指定的原因和 (cause==null ? null : cause.toString()) 的详细消息构造新异常(它通常包含 cause 的类和详细消息)。

因此,可以通过扩展Exception类来构造带有异常原因的新的异常类。