Java 如何正确处理catch块中的嵌套异常

Java 如何正确处理catch块中的嵌套异常,java,exception,try-catch,try-catch-finally,Java,Exception,Try Catch,Try Catch Finally,我有下面的一段代码,我试图理解如何在catch块中正确处理异常,以便抛出两个异常(main异常和anotherException),以便在anotherException的情况下,我们不会丢失main异常的信息。 代码也有异味——这种尝试捕捉的用法是某种反模式吗?有没有更好/正确的方法来处理这种情况 try { -some code- } catch (RuntimeException mainException) {

我有下面的一段代码,我试图理解如何在catch块中正确处理异常,以便抛出两个异常(
main异常
anotherException
),以便在
anotherException
的情况下,我们不会丢失
main异常
的信息。 代码也有异味——这种尝试捕捉的用法是某种反模式吗?有没有更好/正确的方法来处理这种情况

        try {
            -some code-
        } catch (RuntimeException mainException) {
            try {
                -another code-
            } catch (Exception anotherException) {
                throw anotherException;
            } finally {
                throw mainException;
            }
        }

在Java7中,作为try with resources工作的一部分,该类通过对异常的支持进行了扩展,特别是针对这样的场景

publicstaticvoidmain(字符串[]args)引发异常{
试一试{
抛出新的运行时异常(“Foo”);
}捕获(RuntimeException mainException){
试一试{
抛出新异常(“Bar”);
}捕获(异常和异常){
mainException.AddSupprested(另一个异常);
}
抛出main异常;
}
}
输出(堆栈跟踪)

线程“main”java.lang.RuntimeException中的异常:Foo at Test.main(Test.java:5) 抑制:java.lang.Exception:Bar at Test.main(Test.java:8)
在Java 7中,作为try with resources工作的一部分,该类通过对异常的支持进行了扩展,特别是针对这样的场景

publicstaticvoidmain(字符串[]args)引发异常{
试一试{
抛出新的运行时异常(“Foo”);
}捕获(RuntimeException mainException){
试一试{
抛出新异常(“Bar”);
}捕获(异常和异常){
mainException.AddSupprested(另一个异常);
}
抛出main异常;
}
}
输出(堆栈跟踪)

线程“main”java.lang.RuntimeException中的异常:Foo at Test.main(Test.java:5) 抑制:java.lang.Exception:Bar at Test.main(Test.java:8)