异常链:常常会在捕获一个异常后抛出另外一个异常,并且希望把异常原始信息保存下来,这被称为异常链。
如果调用一个方法需要对该方法进行异常处理,而想要获得产生异常的根源,可以参考下面的例子。
//自定义异常ExceptionA
public class ExceptionA extends Exception{
public ExceptionA(String e) {
super(e);
}
public ExceptionA() {
}
public ExceptionA(String e,Throwable cause)
{
super(e,cause);
}
public ExceptionA(Throwable cause) {
super(cause);
}
}
//自定义异常ExceptionB
public class ExceptionB extends Exception{
public ExceptionB(String e) {
super(e);
}
public ExceptionB() {
// TODO Auto-generated constructor stub
}
public ExceptionB(String e,Throwable cause)
{
super(e,cause);
}
public ExceptionB(Throwable cause) {
super(cause);
}
}
public class Test {
public static void main(String[] args) {
try {
testa();
} catch (ExceptionA e) {
//对异常信息进行遍历,输出异常信息中的原始异常,直到找到最终的原始异常
Throwable throwable = e;
while(throwable != null)
{
System.out.println(throwable);
throwable = throwable.getCause();
}
}
}
public static void testa() throws ExceptionA
{
try {
testb();
} catch (ExceptionB e) {
throw new ExceptionA("产生了异常A",e);
}
}
public static void testb() throws ExceptionB
{
try {
throw new Exception("产生了异常");
} catch (Exception e) {
throw new ExceptionB("产生了异常B",e);
}
}
}
最后的输出结果:
非常简单的一个例子,程序中的重点是getCause方法的使用,getCause的作用是返回异常对象中的原始异常,通过getCause方法获得原始异常,再通过原始异常调用getCause方法获得更深一层的原始异常,一直循环直到获得最原始的异常