Java程序员面试笔试宝典(第2版)
上QQ阅读APP看书,第一时间看更新

1.20 异常处理

在没有try-with-resources的时候,开发者往往需要编写很多重复而且低效的代码(需要有大量的catch和finally语句)。一旦开发者忘记释放资源,就会造成内存泄漏。从Java7开始引入了try-with-resources来解决这些问题,这个语法的出现可以使代码变得更加简洁,从而增强代码的可读性,也可以更好地管理资源,避免内存泄漏。

下面给出一个在Java7中使用的示例:

从这个例子可以看出,虽然在try语句外已经实例化了一个对象fis,但是为了使用try-with-resources这个特性,需要再使用另外一个额外的引用fis1。因为在JDK7中,try语句块中不能使用外部声明的任何资源。如果把try (InputStream fis1=fis) 修改为try(fis),那么就会出现编译错误。

Java 9针对这个缺陷进行了改进。在Java 9中,try块中可以直接引用外部声明的资源,而不需要外声明一个引用。示例代码如下所示:

显然,在Java 9对try-with-resources进行优化后,代码变得更加简洁。