AutoCloseable接口的使用

jdk1.7 引入了资源自动关闭的AutoCloseable接口。

从AutoCloseable的注释可知它的出现是为了更好的管理资源,准确说是资源的释放。当一个资源类实现了该接口close方法,在使用try-catch-resources语法创建的资源抛出异常后,JVM会自动调用close 方法进行资源释放,当没有抛出异常正常退出try-block时候也会调用close方法。像数据库链接类Connection,IO类InputStream或OutputStream都直接或者间接实现了该接口。

使用的时候只需要把资源创建在try块中,用小括号括起来就可以了。

如:FileReader(extends)——>InputStreamReader(extends)——>Reader

public abstract class Reader implements Readable, Closeable {}

public interface Closeable extends AutoCloseable {}

InputStreamReader类实现了close()接口,在此方法中做了关闭资源的操作

public class InputStreamReader extends Reader {
    //省略其他代码...
    public void close() throws IOException {
        sd.close();
    }
}

使用示例:

public static void main(String[] args) {
        try (
                FileReader reader = new FileReader("D:/test.txt");
                FileWriter writer = new FileWriter("D:/out.txt");
        ) {
            int read = reader.read();
            while (read != -1) {
                writer.write(read);
                read = reader.read();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

如果不使用AutoCloseable接口的资源管理方式:

如上代码创建了两个资源,在try-catch-finally的finally里面进行手动进行资源释放,释放时候还需要进行catch掉异常。

对比前后两种操作,显然实现AutoCloseable接口可以让代码变得更加简洁。

AutoCloseable接口使用总结:

  • 使用try-catch-resources结构无论是否抛出异常在try-block执行完毕后都会调用资源的close方法。
  • 使用try-catch-resources结构创建多个资源,try-block执行完毕后调用的close方法的顺序与创建资源顺序相反
  • 使用try-catch-resources结构,try-block块抛出异常后先执行所有资源(try的()中声明的)的close方法然后在执行catch里面的代码然后才是finally
  • 只用在try的()中声明的资源的close方法才会被调用,并且当对象销毁的时候close也不会被调用
  • 使用try-catch-resources结构,无须显示调用资源释放

参考阅读:

浅谈 Java 中的 AutoCloseable 接口 - 知乎

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

swadian2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值