抛出之前显然会显示Java异常

时间:2015-02-24 15:17:37

标签: java

我目前正在学习java中的异常,并编写了一个带有链式异常的测试类,用于打印堆栈跟踪。然而,结果让我对执行的顺序感到困惑。我已经运行了好几次,并得到了不同的输出。

这是班级:

public class Test {
    private static void foo() {
        try {
            System.out.println("foo try");
            bar();
        } catch (Exception e) {
            System.out.println("foo catch - "+e.getMessage()+", cause: "+e.getCause());
            StackTraceElement elements[] = e.getStackTrace();
            for (int i = 0, n = elements.length; i < n; i++) {
                System.err.println(elements[i].getFileName()
                        + ":" + elements[i].getLineNumber()
                        + ">> "
                        + elements[i].getMethodName() + "()");
            }
        } finally {
            System.out.println("foo finally");
        }
    }

    private static void bar() throws Exception {
        try {
            System.out.println("bar try");
            int[] a = new int[10];
            System.out.println(a[10]);
            // Never reached
        } catch (IndexOutOfBoundsException e) {
            System.out.println("bar catch - "+e.getMessage());
            throw new Exception("Chained exception", e);
        } finally {
            System.out.println("bar finally");
        }
    }

    public static void main(String args[]) {
        foo();
    }
}

在IntelliJ中为我生成了以下输出: enter image description here

如何在抛出异常之前显示异常?如何在堆栈跟踪的元素之间进行其他语句 - 它们的执行顺序是什么?据我所知,堆栈跟踪最后应打印出来。

0 个答案:

没有答案