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