异常信息解读

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Test {

private void fun1() throws IOException {
throw new IOException("level 1 exception");
}

private void fun2() {
try {
fun1();
} catch (IOException e) {
throw new RuntimeException("level 2 exception", e);
}
}

public static void main(String[] args) {
try {
new Test().fun2();
} catch (Exception e) {
e.printStackTrace();
}
}
}
1
2
3
4
5
6
7
java.lang.RuntimeException: level 2 exception
at space.xorex.SSM_CRUD.DAO.Test.fun2(Test.java:15)
at space.xorex.SSM_CRUD.DAO.Test.main(Test.java:21)
Caused by: java.io.IOException: level 1 exception
at space.xorex.SSM_CRUD.DAO.Test.fun1(Test.java:8)
at space.xorex.SSM_CRUD.DAO.Test.fun2(Test.java:13)
... 1 more

对于整个异常栈来说,最下面的 Caused by 就是异常最初被抛出来的类型和原因。然后依次向上的 Caused by 就是上一个异常被捕获之后,catch 语句里面抛出来的其他的异常。每一个 Caused by 都是捕获下一层抛出的异常,经过分析后被抛出的新异常。而没有 Caused by 修饰的最顶层异常,就是没有被任何程序捕捉处理的异常。

异常栈里每一层都有这些信息组成:

1
2
3
4
[Caused by] 异常名 自定义异常出现原因 
异常在被捕获之前经过的第一个方法
异常在被捕获之前经过的第二个方法
...

需要注意的是,异常中会有 XXX more 的语句,这是指没有被打印出来的方法对异常的抛接过程,是不重要的信息,可以不用管。