TWR: try-with-resource
我们知道JDK7增加了 在 try中声明 inputstream等资源,JDK会自动帮我们关闭。
try(InputStream is=XXX.class.getResourceAsStream("/templates/1.txt")) {
String result = IOUtils.toString(is, StandardCharsets.UTF_8);
System.out.println(result);
}
它实现的方式其实是在编译java文件的时候,自动帮我们加上了close的相关代码。
下面是反编译class类看到的代码,红色部分为编译器自动帮我们加上的close代码:
垃圾回收能帮我们关闭这些资源吗? 不行!
TWR :
对于实现AutoCloseable接口的类的实例,将其放到try后面(我们称之为:带资源的try语句),
在try结束的时候,会自动将这些资源关闭(调用close方法)。
带资源的try语句的3个关键点:
1、由带资源的try语句管理的资源必须是实现了AutoCloseable接口的类的对象。
2、在try代码中声明的资源被隐式声明为final。
3、通过使用分号分隔每个声明可以管理多个资源。
避免异常屏蔽: addSuppressed方法
详见:Java 避免异常屏蔽 - addSuppressed