中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

java 異(yi)常鏈

有的時候我們會用printStackTrace來打印異常棧,有可能我們會在處理異常的時候同時又拋出一個異常。
自定義兩個異常

class MyException1 extends Exception{
	
} 


class MyException2 extends Exception{
	MyException2(Throwable throwable){
		super(throwable);
	}
	MyException2(){
		super();
	}
}

MyException2 調(diao)用了父類的(de)構造方法,目的(de)是為了能夠傳遞一(yi)個cause進來。

接下來定義一個A 類(lei),并在他(ta)的f()方(fang)法里(li)調(diao)用g()方(fang)法,然后在f處理(li)g里(li)拋(pao)出的異常的時候再次拋(pao)出一個異常

class A{
	public void f() throws MyException2{
		try {
			g();
		} catch (MyException1 e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new MyException2();
		}
	}
	public void g() throws MyException1{
		throw new MyException1();
	}
}

在catch里我(wo)們又(you)拋出了一個MyException2的異常,這里我(wo)們先調用它的無參(can)構造(zao)方法(fa)

接下(xia)來(lai)我們在main里(li)跑(pao)一(yi)下(xia)

public class Main {
	public static void main(String[] args) {
		A a = new A();
		try {
			a.f();
		} catch (MyException2 e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

看一下控制臺

我們可以明顯的發現異(yi)常棧的內(nei)容變少了。這(zhe)是(shi)因為(wei)MyException2對MyException1的環境(jing)一無所(suo)知。

那么如果MyException2 能夠持有MyException1的環境信息,這樣做起來就十分方便了,并且也形成了一條鏈,我們也成為異常鏈。
唯(wei)一要修改(gai)的(de)就是調(diao)用MyException2的(de)有參構造(zao)函(han)數,把MyException1當作cause傳(chuan)遞進去,這樣的(de)話我們就能獲取(qu)到MyException1的(de)信息了(le)。

class A{
	public void f() throws MyException2{
		try {
			g();
		} catch (MyException1 e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
                        //這里做了修改
			throw new MyException2(e);
		}
	}
	public void g() throws MyException1{
		throw new MyException1();
	}
}

我們再次運行


我們(men)會發現我們(men)已(yi)經可(ke)以持(chi)有MyException1的環(huan)境信息了

posted @ 2016-10-16 17:44  浩大王  閱讀(469)  評論(0)    收藏  舉報