美文网首页
AutoCloseable接口,优雅的关闭资源

AutoCloseable接口,优雅的关闭资源

作者: zhy0324 | 来源:发表于2020-07-28 14:01 被阅读0次

在jdk1.7的时候提供了一个自动资源关闭的接口,叫AutoCloseable。资源代表的有很多,例如、IO资源,网络资源,数据库资源等等。为什么叫自动资源关闭,例如我们用IO流读取一个文件,之前的写法是

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class OldIO {
    public static void main(String[] args) {
        File file = new File("D:/test.txt");
        BufferedReader bufferedReader = null;
        try {
            bufferedReader = new BufferedReader(new FileReader(file));
            String txtLine = null;
            while ((txtLine = bufferedReader.readLine()) != null){
                System.out.println(txtLine);
            }
            bufferedReader.close();//关闭资源
        }catch (Exception e){

        }finally {
            if (bufferedReader != null){ //代码执行完,如果资源没释放,则需要关闭资源
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

可见在正常读取完毕,需要关闭资源,为了防止读取过程中抛出异常,则需要再finally块中判断资源是否关闭,然后再去关闭资源。
所以在JDK1.7的时候就提出了一种自动关闭资源的想法,所以AutoCloseable接口就诞生了,查看AutoCloseable源码会发现,接口只有一个方法close()

package java.lang;

public interface AutoCloseable {


    void close() throws Exception;
}

并且接口属于java.lang包属于lang包的一个基础类库。查看官方文档,可以发现茫茫多的接口、类或继承或实现了该接口。当然上面的BufferedReader这个类也实现了AutoCloseable接口,但是关闭资源的写法要注意,新的写法是这样的:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;


public class AutoCloseIO {
    public static void main(String[] args) {
        File file = new File("D:/test.txt");
        //AutoCloseable的写法,try(资源){}catch{}
        try(BufferedReader bufferedReader = new BufferedReader(new FileReader(file))){
            String txtLine = null;
            while ((txtLine = bufferedReader.readLine()) != null){
                System.out.println(txtLine);
            }
        }catch (Exception e){

        }
    }
}

是不是优雅了很多呢?

所有实现了AutoCloseable的类都可以这么写,当然也可以写一个类实现AutoCloseable,但是AutoCloseable只是一个接口,提供了这种关闭资源的途径,所以close()方法必须实现,而在资源colse的时候一定要考虑周全,一般新手不建议自己手写AutoCloseable。

相关文章

网友评论

      本文标题:AutoCloseable接口,优雅的关闭资源

      本文链接:https://www.haomeiwen.com/subject/fsefrktx.html