《Effective Java》 读书笔记(九)使用try-with-resources 语句替代try-finally

这一点其实深有感触。话不多说,先上代码:

    static String firstLineOfFile(String path) {
        BufferedReader bufferedReader = null;
        try {
            bufferedReader = new BufferedReader(new FileReader(path));
            return bufferedReader.readLine();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != bufferedReader) {
                    bufferedReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return "";

    }

这是一个完整的读取一个文件的第一行字符的代码。

核心其实就两句:

 bufferedReader = new BufferedReader(new FileReader(path));
 return bufferedReader.readLine();

但是为了能够正确的关闭各种资源,代码变得异常冗长。

在Java 7引入try-with-resources之后,所有的问题便得到了解决:

当一个资源类实现了AutoCloseable的时候,我们可以使用try-with-resource自动管理资源

先看代码:

    static String firstLineOfFileNew(String path) {
        try (BufferedReader bufferedReader = new BufferedReader(new FileReader(path))) {
            return bufferedReader.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }

这种版本比原始的版本精简的多,而且try-with-resource对close方法进行了异常抑制:当对外部资源进行处理(例如读或写)时,如果遭遇了异常,且在随后的关闭外部资源过程中,又遭遇了异常,那么你catch到的将会是对外部资源进行处理时遭遇的异常,关闭资源时遭遇的异常将被“抑制”但不是丢弃,通过异常的getSuppressed方法,可以提取出被抑制的异常。这样能够让开发者更快的定位到异常

猜你喜欢

转载自www.cnblogs.com/dengchengchao/p/9049828.html