对于JDK7及以上版本,可以使用try-with-resources方式
使用方式:
/**
* https://www.cnblogs.com/itZhy/p/7636615.html
* 其实这种方式只是语法糖,反编译以后还是tryCacheThrowTest()中的代码
* https://www.cnblogs.com/langtianya/p/5139465.html
* Throwable#addSuppressed()作用:通常在finally中出现异常不是我们需要关注点,当一个异常被抛出的时候,
* 可能有其他异常因为该异常而被抑制住,从而无法正常抛出,此时可以通过Throwable#addSuppressed()
* 方法将异常记录到堆栈中,通过getSuppressed方法来获取这些异常
*/
@Test
public void tryWithResourceTest(){
try (FileInputStream inputStream = new FileInputStream(new File("test"))) {
System.out.println(inputStream.read());
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
@Test
public void tryCacheThrowTest(){
try {
FileInputStream inputStream = new FileInputStream(new File("test"));
Throwable var2 = null;
try {
System.out.println(inputStream.read());
} catch (Throwable var12) {
var2 = var12;
throw var12;
} finally {
if (inputStream != null) {
if (var2 != null) {
try {
inputStream.close();
} catch (Throwable var11) {
var2.addSuppressed(var11);
}
} else {
inputStream.close();
}
}
}
} catch (IOException var14) {
throw new RuntimeException(var14.getMessage(), var14);
}
}