異常鏈:常常會在捕獲一個異常後拋出另外一個異常,並且希望把異常原始信息保存下來,這被稱爲異常鏈。
如果調用一個方法需要對該方法進行異常處理,而想要獲得產生異常的根源,可以參考下面的例子。
//自定義異常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方法獲得更深一層的原始異常,一直循環直到獲得最原始的異常