通過對異常鏈遍歷找到原始異常

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章