Java链式异常
jdk 1.4 开始
通过链式异常,可以为异常关联另一个异常。第二个一场描述第一个异常的原因(描述当前异常原因的异常)
eg:假设某个方法由于试图除零而抛出arithmetiException异常,导致问题发生的实际原因并不是除零异常。而是I/O异常,该错误导致了为除数设置了一个不正确的值。
使用链式异常为Throwable的构造函数 添加了
Throwable(Throwable causeExc)
Throwable(String msg,Throwable causeeXC)
第一种形式中 causeExc是引发当前异常的异常,即causeExc是引发当前一场的背后原因
第二种形式允许在指定引发异常的同时指定一场的描述。
————————这两个构造函数也被引入到了 异常类的Error Exception RuntimeException类中。
API方法
Throwable getCuse()
Throwable initCause(Throwable causeExc)
explain:
getCause():返回引发当前异常的异常,如果不存在异常就返回null
initCause(Throwable causeExc): 将causeExc 和调用的异常关联在一起。每个异常的initCause()方法只能调用一次
code:
package javastudyforexception;
/**
* Created by D9ing on 16/7/8.
* 链式异常的处理
*/
public class ChainExcDemo {
/**
* 抛出异常方法
*/
static void demoproc() throws NullPointerException {
NullPointerException nullPointerException = new NullPointerException("top layer");
//关联调用异常
nullPointerException.initCause(new ArithmeticException("cause"));
throw nullPointerException;
}
public static void main(String[] args) {
try {
demoproc();
} catch (NullPointerException e) {
System.out.println("caught" + e);
System.out.println("origin" + e.getCause());
}
}
}