Java核心编程
上QQ阅读APP看书,第一时间看更新

5.8 try-with-resources语句的详细用法

关于try-with-resources语句,在前面章节也做过介绍,最早是在Java 7中引入的。在Java 9中,又对try-with-resources进行了改进,使得用户可以更加方便、简洁地使用try-with-resources语句。

为了演示try-with-resources语句的好处,先来看一个在Java 7之前对于资源处理的例子。

5.8.1 手动关闭资源

在Java 7之前,资源需要手动关闭。下面是一个很常见的文件操作的例子:

在Java 7之前,一定要在finally中执行close,以释放资源。

5.8.2 Java 7中的try-with-resources介绍

try-with-resources是Java 7中一个新的异常处理机制,能够很容易地关闭在try-catch语句块中使用的资源。所谓的资源(resource)是指在程序完成后,必须关闭的对象。try-with-resources语句确保了每个资源在语句结束时关闭。所有实现了java.lang.AutoCloseable接口(其中,它包括实现了java.io.Closeable的所有对象),可以使用作为资源。

例如,我们自定义一个资源类:

执行输出如下:

   do something
   resource is closed

可以看到,资源终止被自动关闭了。

再来看一个例子,是同时关闭多个资源的情况:

最终输出为:

   do something
   do other things
   other resource is closed
   some resource is closed

在try语句中越是最后使用的资源,越是最早被关闭。

5.8.3 try-with-resources在Java 9中的改进

作为JEP 213规范(http://openjdk.java.net/jeps/213)的一部分,try-with-resources声明在Java 9中已得到改进。如果已经有一个资源是final或等效于final的变量,则可以在try-with-resources语句中使用该变量,而无须在try-with-resources语句中声明一个新变量。

例如,给定资源的声明:

用老方法编写代码来管理这些资源是类似的:

而新方法可以是:

看上去简洁很多!