运维开发网

java9第9版功能资源自动关闭的语法增强

运维开发网 https://www.qedev.com 2022-10-07 14:49 出处:网络
这篇文章主要为大家介绍了java9版本特性资源自动关闭的语法增强的详细使用说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

这篇文章主要为大家介绍了java9版本特性资源自动关闭的语法增强的详细使用说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步


我计划在接下来的时间里写一系列关于java 9的文章。虽然java 9不像java 8或Java 11那样是核心Java版本,但还是有很多特性值得关注。期待大家的关注,我会把java 9写成系列文章,大概十篇左右。

Java9第1部分——您可以在接口中定义私有方法

在Java 9版本中,JDK 7支持的try-with-resources语法得到了改进。虽然只是小进步,但还是想把他介绍给大家。让我们天天向上。


一、先说Java7的try-with-resources(Java9改进版在后文)

在Java 7之前,没有try-with-resources语法,所有的流销毁操作都需要通过在finally方法中编写代码来手动关闭。下面的代码将一个字符串写入文件。

@Testvoid testStream() throws IOException { String fileName = "D:\\data\\test\\testStream.txt"; FileOutputStream fos = new FileOutputStream(fileName); //创建IO管道流 OutputStreamWriter osw = new OutputStreamWriter(fos); BufferedWriter bw = new BufferedWriter(osw); try{ bw.write("手写代码进行Stream流的关闭"); bw.flush(); }finally{ bw.close(); //手动关闭IO管道流 osw.close(); fos.close(); }}

从Java版本7开始,就提供了try-with-resources语法。我们只需要用try()包含管道流。try代码段执行完成后,IO管道流会自动关闭,我们不需要写代码就可以关闭。这个很简洁!

@Testvoid testTry() throws IOException { String fileName = "D:\\data\\test\\testTry.txt"; try(FileOutputStream fos = new FileOutputStream(fileName); OutputStreamWriter osw = new OutputStreamWriter(fos); BufferedWriter bw = new BufferedWriter(osw);){ bw.write("IO管道流被自动调用close()方法"); bw.flush(); }}


二、避免走入误区

很多小伙伴在了解了try-with-resources的语法后,很容易陷入误区

误解1:只有IO管道流可以使用try-with-resources语法来自动关闭资源。

误区2:所有带有close()方法的类对象都会自动调用close()方法来关闭资源。

第一个错误缩小了实践范围,第二个错误夸大了实践范围。那么什么样的资源可以自动关闭呢?答案是实现AutoCloseable或Closeable接口的类可以自动关闭资源。

public interface Closeable extends AutoCloseable { public void close() throws IOException;}

close接口继承自AutoCloseable接口,两者都包含close()方法。如果占用系统资源的自定义类需要回收,请实现这两个接口中的一个,在close()方法中回收并关闭资源。您还可以使用try-with-resources语法来回收和关闭自定义类的资源。


三、try-with-resources在Java 9中的改进

在java 9中,Try-with-resources语法得到了改进。try-with-resources语法的try()可以包含变量,多个变量之间用分号分隔。这种改进的目的是使语义更加清晰,并将资源创建代码与尝试资源恢复的语法分开。

语义1:尝试执行代码段,如果抛出异常,处理异常。

语义2:尝试自动关闭资源。接近谁?关闭try()包含的变量

@Testvoid testJava9Try() throws IOException { String fileName = "D:\\data\\test\\testJava9Try.txt"; FileOutputStream fos = new FileOutputStream(fileName); OutputStreamWriter osw = new OutputStreamWriter(fos); BufferedWriter bw = new BufferedWriter(osw); try(bw;osw;fos){ //注意这里:尝试去回收这三个对象对应的资源,和上文中的java 7代码对比 bw.write("Java9-可以被自动调用close()方法"); bw.flush(); }}

以上是java9版本特性资源自动关闭的语法增强细节。

0

精彩评论

暂无评论...
验证码 换一张
取 消