第5节 JAVA中的异常链
有时候可以把捕获的异常包装成一个新的异常,在新的异常里头添加对原始异常的引用,再把新异常抛出,一个导致另一个即异常链。
package com.imooc;
public class Chaintest {
/**
* test1():抛出"喝大了"异常
* test2():调用test1(),捕获“喝大了”,并且包装成运行时异常,继续抛出
* main方法中,调用test2(),尝试捕获test2()方法抛出的异常
* @param args
*/
public static void main(String[] args) {
Chaintest ct=new Chaintest();
try{
ct.test2();
}catch(Exception e){
e.printStackTrace();
}
}
public void test1() throws DrunkException{
throw new DrunkException("喝车别开酒");
}
public void test2(){
try {
test1();
} catch (DrunkException e) { //把捕获到的异常包装成一个运行时异常
// TODO Auto-generated catch block
RuntimeException newExc=new RuntimeException("司机一滴酒,亲人两行泪");
newExc.initCause(e);
throw newExc;
}
}
}
结果:
“喝大了” 异常导致了RuntimeException,
新的异常包含了原始异常的所有信息。
简化上面异常的方法:把“司机一滴酒,亲人两行泪”替换成e。