Heim > Java > javaLernprogramm > Welche Syntax wurde in der Java 9-Version verbessert?

Welche Syntax wurde in der Java 9-Version verbessert?

王林
Freigeben: 2023-05-10 20:25:04
nach vorne
1004 Leute haben es durchsucht

一、先说Java7的try-with-resources

在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();  }}
Nach dem Login kopieren

从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();  }}
Nach dem Login kopieren

二、避免走入误区

很多小伙伴在知道try-with-resources语法之后,容易陷入误区

误区一:只有IO管道流才能使用try-with-resources语法,进行自动的资源关闭误区二:所有带有close()方法的类对象,都会自动的调用close()方法进行资源关闭

误区一把实践范围缩小了,而误区二把实践范围夸大了。那么什么样的资源可以被自动关闭呢?答案就是实现了AutoCloseable或Closeable接口的类可以自动的进行资源关闭。

public interface Closeable extends AutoCloseable {    public void close() throws IOException;}
Nach dem Login kopieren

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

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

try-with-resources语法在java 9 中进行了改进,try-with-resources语法的try()可以包含变量,多个变量用分号隔开。 这样的改进目的是让语义更加明确,将资源创建代码与尝试资源回收的语法分离。

语义一:尝试去执行代码段,如果抛出异常,对异常进行处理语义二:尝试去自动关闭资源,关闭谁?关闭被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();  }}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWelche Syntax wurde in der Java 9-Version verbessert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage