Java例外チェーン

例外は、異常発生時に、異常な例外チェーンを使用することが以前に必要な情報の損失を防ぎます。次のコードを考えてみましょう。

public class Testchain {

	public static void main(String[] args) {
		Testchain chain = new Testchain();
		try {
			chain.test2();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	void test1() throws MyException {
		throw new MyException("自定义异常");
	}
	void test2() throws Exception {
		try {
			test1();
		} catch (MyException e) {
			throw new Exception("异常2");
		}
	}
}
//自定义MyException异常
class MyException extends Exception {
	public MyException(String message) {
		super(message);
	}
}

test1の方法は、次のように同時に、プログラムの実行を新しい例外をスローし、MyException異常、test2はtest1のメソッド呼び出しがスローされます。

java.lang.Exception: 异常2
	at java1.Testchain.test2(Testchain.java:20)
	at java1.Testchain.main(Testchain.java:8)

このように、TEST1 TEST2もともとスローされた例外は上書きスロー新しい例外です。あなたはTEST1スローされた例外を保持したい場合は、2つの方法があります1は、initCause()メソッドを呼び出して、他のは、建設メソッド呼び出しが原因の引数を渡しています。

public class Testchain {

	public static void main(String[] args) {
		Testchain chain = new Testchain();
		try {
			chain.test2();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	void test1() throws MyException {
		throw new MyException("自定义异常");
	}
	void test2() throws Exception {
		try {
			test1();
		} catch (MyException e) {
			Exception exc = new Exception("异常2");
			exc.initCause(e);
			throw exc;
		}
	}
}
class MyException extends Exception {
	public MyException(String message) {
		super(message);
	}
}
public class Testchain {

	public static void main(String[] args) {
		Testchain chain = new Testchain();
		try {
			chain.test2();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	void test1() throws MyException {
		throw new MyException("自定义异常");
	}
	void test2() throws Exception {
		try {
			test1();
		} catch (MyException e) {
			//调用传递cause参数的构造方法
			throw new Exception("异常2", e);
		}
	}
}
class MyException extends Exception {
	public MyException(String message) {
		super(message);
	}
}

結果は以下の通りであります:

java.lang.Exception: 异常2
	at java1.Testchain.test2(Testchain.java:21)
	at java1.Testchain.main(Testchain.java:8)
Caused by: java1.MyException: 自定义异常
	at java1.Testchain.test1(Testchain.java:15)
	at java1.Testchain.test2(Testchain.java:19)
	... 1 more
公開された44元の記事 ウォンの賞賛0 ビュー835

おすすめ

転載: blog.csdn.net/Komatsu_1137/article/details/104072899
おすすめ