背景介绍
在Java程序中,为了确保程序正确运行,我们需要清理和关闭资源。当我们使用try-catch语句来处理异常时,我们使用finally块来关闭打开的资源。使用finally块来维护资源可能会导致一些难以调试和维护的问题。因此,Java 7引入了try-with-resources语句,它允许我们打开一个或多个资源,只要它们实现了AutoCloseable接口,就可以在try块内使用。对于try-with-resources语句,不需要finally块来关闭资源,当try块完成或由于异常而中止时,自动调用close()方法关闭资源。
什么是try-with-resources语句?
try-with-resource语句是在Java 7中引入的一个新功能,它使得Java程序员更容易管理打开的资源。try-with-resources语句用于在try语句块结束时自动关闭资源。资源是一个对象,必须在程序结束之前被关闭,因为它们占用系统资源。Java类库中的许多类需要在使用后关闭,如文件、数据库连接和socket。之前,我们都需要在finally语句块中关闭资源,但现在我们可以使用try-with-resouces语句,在try块中使用资源,并自动关闭它们,这样可以减少代码量。
在Java 9中如何在try-with-resources语句中声明多个资源?
在Java 7和Java 8中,我们可以使用try-with-resources语句来声明一个或多个资源。在Java 9中,Java编译器引入了一种新的语法,使我们能够在try-with-resources语句中声明多个资源,而无需使用括号包含它们。
使用Java 7中的try-with-resources语句来声明多个资源
try(FileInputStream fis = new FileInputStream(file);
GZIPInputStream gzis = new GZIPInputStream(fis);
InputStreamReader isr = new InputStreamReader(gzis);
BufferedReader br = new BufferedReader(isr))
{
// do stuff
} catch(Exception ex) {
ex.printStackTrace();
}
在上面的代码中,我们声明了四个资源,FileInputStream、GZIPInputStream、InputStreamReader和BufferedReader。这些资源都会在try块结束时自动关闭。在catch块中,我们只需要处理异常,不需要关闭资源。
在Java 9中如何在try-with-resources语句中声明多个资源?
在Java 9中,我们可以使用分号分隔每个资源,而无需使用括号将它们包含在一个列表中。以下是在Java 9中声明多个资源的示例:
try (FileInputStream fileInputStream = new FileInputStream("file.txt");
ZipInputStream zipInputStream = new ZipInputStream(fileInputStream);
InputStreamReader inputStreamReader = new InputStreamReader(zipInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
// do stuff
}catch(Exception e){
e.printStackTrace();
}
在这个示例中,我们声明了四个资源,包括FileInputStream、ZipInputStream、InputStreamReader和BufferedReader。这些资源都将在try块结束时自动关闭,而无需try语句的finally块。
总结
Java 9中引入了一种新的语法,使我们能够在try-with-resources语句中声明多个资源而无需使用括号包含它们。这种新的语法使Java编程更加简单和方便。