栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

AutoCloseable接口的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 接口 - 知乎

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678296.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号