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代码:

java 关机 java自动关闭_Java

 

 

 

垃圾回收能帮我们关闭这些资源吗?  不行!

java 关机 java自动关闭_sed_02

java 关机 java自动关闭_Java_03

 

TWR :

java 关机 java自动关闭_Java_04

 

对于实现AutoCloseable接口的类的实例,将其放到try后面(我们称之为:带资源的try语句),

在try结束的时候,会自动将这些资源关闭(调用close方法)

带资源的try语句的3个关键点:

 

1、由带资源的try语句管理的资源必须是实现了AutoCloseable接口的类的对象。

2、在try代码中声明的资源被隐式声明为final。

3、通过使用分号分隔每个声明可以管理多个资源。

 

避免异常屏蔽:  addSuppressed方法

java 关机 java自动关闭_java 关机_05

 

 详见:Java 避免异常屏蔽 - addSuppressed

 

 

java 关机 java自动关闭_反编译_06