使用资源试用语句的用途是什么?
2022-08-31 16:20:40
Java 7 有一个名为 try-with-resources 的新功能。这是什么?为什么我们应该在哪里使用它,以及我们可以在哪里利用这个功能?
这句话没有让我感到困惑的障碍。try
catch
Java 7 有一个名为 try-with-resources 的新功能。这是什么?为什么我们应该在哪里使用它,以及我们可以在哪里利用这个功能?
这句话没有让我感到困惑的障碍。try
catch
它的引入是因为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也是如此
如文档中所述:
使用资源试用语句是声明一个或多个资源的 try 语句。资源是在程序完成之后必须关闭的对象。资源试用语句确保在语句末尾关闭每个资源。任何实现的对象,包括所有实现的对象,都可以用作资源。
java.lang.AutoCloseable
java.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 语句是正常完成还是突然完成,它都将关闭
您可以从这里阅读更多内容。