Java中的链式异常
链式异常允许将一个异常与另一个异常联系起来,即一个异常描述另一个异常的原因。例如,考虑一种情况,其中方法由于尝试除以零而引发 ArithmeticException,但异常的实际原因是导致除数为零的 I/O 错误。该方法将只向调用者抛出 ArithmeticException。所以调用者不会知道异常的实际原因。在这种情况下使用链式异常。
在Java中支持链式异常的 Throwable 类的构造函数:
- Throwable(Throwable cause) :- 其中 cause 是导致当前异常的异常。
- Throwable(String msg, Throwable cause) :- msg 是异常消息,cause 是导致当前异常的异常。
在Java中支持链式异常的 Throwable 类的方法:
- getCause() 方法:- 此方法返回异常的实际原因。
- initCause(Throwable Cause) 方法:- 此方法设置调用异常的原因。
使用链式异常的示例:
// Java program to demonstrate working of chained exceptions
public class ExceptionHandling
{
public static void main(String[] args)
{
try
{
// Creating an exception
NumberFormatException ex =
new NumberFormatException("Exception");
// Setting a cause of the exception
ex.initCause(new NullPointerException(
"This is actual cause of the exception"));
// Throwing an exception with cause.
throw ex;
}
catch(NumberFormatException ex)
{
// displaying the exception
System.out.println(ex);
// Getting the actual cause of the exception
System.out.println(ex.getCause());
}
}
}
输出:
java.lang.NumberFormatException: Exception
java.lang.NullPointerException: This is actual cause of the exception