我们经常会使用finally{ } 去关闭连接或释放资源,但是资源的释放等也可能会出现异常。
public class ExcTest{
@Test
public void exception() {
try {
int a = 10/0;
throw new RuntimeException("try中的异常");
} finally {
throw new RuntimeException("finally中的异常");
}
}
这里可以看到 只有 finally 中的异常信息,并没有 try 中的异常信息,这是因为 finally 中的异常信息覆盖了
try 中的异常信息,一个方法无法抛出两个异常导致的。
解决方法是:
1.finally代码块自己负责异常捕获和处理
2.把try中的异常当做主异常,使用addSuppressed方法把finally的异常追加到主异常上
3.使用 try-with-resources 语句