使用资源试用语句的用途是什么?

2022-08-31 16:20:40

Java 7 有一个名为 try-with-resources 的新功能。这是什么?为什么我们应该在哪里使用它,以及我们可以在哪里利用这个功能?

这句话没有让我感到困惑的障碍。trycatch


答案 1

它的引入是因为Java中使用的一些资源(如SQL连接或流)难以正确处理;例如,在java 6中,要正确处理输入流,您必须执行以下操作:

InputStream stream = new MyInputStream(...);
try {
    // ... use stream
} catch(IOException e) {
   // handle exception
} finally {
    try {
        if(stream != null) {
            stream.close();
        }
    } catch(IOException e) {
        // handle yet another possible exception
    }
}

你注意到丑陋的双重尝试了吗?现在,使用资源试用,您可以执行此操作:

try (InputStream stream = new MyInputStream(...)){
    // ... use stream
} catch(IOException e) {
   // handle exception
}

close() 被自动调用,如果它抛出一个 IOException,它将被抑制(如 Java 语言规范 14.20.3 中指定的那样)。java.sql.Connection也是如此


答案 2

文档中所述

使用资源试用语句是声明一个或多个资源的 try 语句。资源是在程序完成之后必须关闭的对象。资源试用语句确保在语句末尾关闭每个资源。任何实现的对象,包括所有实现的对象,都可以用作资源。java.lang.AutoCloseablejava.io.Closeable

下面的示例从文件中读取第一行。它使用 BufferedReader 的实例从文件中读取数据。BufferedReader 是一种资源,在程序用完它之后必须关闭它:

static String readFirstLineFromFile(String path) throws IOException {
    try (BufferedReader br =
                   new BufferedReader(new FileReader(path))) {
        return br.readLine();
    }
}

在此示例中,在 try-with-resources 语句中声明的资源是 BufferedReader。声明语句显示在 try 关键字后面的括号内。在 Java SE 7 及更高版本中,BufferedReader 类实现了 java.lang.AutoCloseable 接口。由于 BufferedReader 实例是在 try-with-resource 语句中声明的,因此无论 try 语句是正常完成还是突然完成,它都将关闭

您可以从这里阅读更多内容


推荐