📜  Java中的链式异常

📅  最后修改于: 2020-04-05 07:21:55             🧑  作者: Mango

链接的异常允许将一个异常与另一个异常相关联,即,一个异常描述了另一个异常的原因。例如,考虑一种情况,其中一种方法由于尝试除以零而引发ArithmeticException,但实际的异常原因是导致除数为零的I / O错误。该方法仅将ArithmeticException抛出给调用方。因此,调用者不会知道异常的实际原因。链式异常用于此类情况。
构造函数的Throwable类支持链接Java异常:

  1. Throwable(Throwable cause):其中cause是导致当前异常的异常。
  2. Throwable(String msg,Throwable cause):其中msg是异常消息,而cause是导致当前异常的异常。

Throwable类的方法,这些方法在Java中支持链式异常:

  1. getCause()方法:此方法返回异常的实际原因。
  2. initCause(Throwable cause)方法:此方法设置调用异常的原因。

使用链式异常的示例:

// Java程序展示链式异常
public class ExceptionHandling
{
    public static void main(String[] args)
    {
        try
        {
            // 创建异常
            NumberFormatException ex =
                       new NumberFormatException("异常");
            // Setting a cause of the exception
            ex.initCause(new NullPointerException(
                      "异常产生的实际原因"));
            // 抛出异常.
            throw ex;
        }
        catch(NumberFormatException ex)
        {
            // 展示异常
            System.out.println(ex);
            // 获取实际异常的原因
            System.out.println(ex.getCause());
        }
    }
}

输出:

java.lang.NumberFormatException: 异常
java.lang.NullPointerException: 异常产生的实际原因