📜  Java9 try-with-resource功能

📅  最后修改于: 2020-10-14 00:41:18             🧑  作者: Mango

Java 9尝试进行资源增强

Java在Java 7中引入了try-with-resource功能,该功能有助于在使用后自动关闭资源。

换句话说,我们可以说我们不需要显式关闭资源(文件,连接,网络等),而是使用AutoClosable接口尝试使用资源自动关闭资源。

在Java 7中,try-with-resources有一个限制,要求资源在其块内本地声明。

在资源块中声明的示例Java 7资源

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class FinalVariable {
public static void main(String[] args) throws FileNotFoundException {
try(FileOutputStream fileStream=new FileOutputStream("javatpoint.txt");){
 String greeting = "Welcome to javaTpoint.";    
        byte b[] = greeting.getBytes();     
        fileStream.write(b);    
        System.out.println("File written");       
}catch(Exception e) {
System.out.println(e);
}
}
}

这段代码可以在Java 7甚至Java 9上很好地执行,因为Java保留了它的传统。

但是下面的程序不适用于Java 7,因为我们不能将声明的资源放在try-with-resource之外。

Java 7资源在资源块外声明

如果我们喜欢Java 7中的以下代码,则编译器会生成一条错误消息。

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class FinalVariable {
public static void main(String[] args) throws FileNotFoundException {
FileOutputStream fileStream=new FileOutputStream("javatpoint.txt");
try(fileStream){
 String greeting = "Welcome to javaTpoint.";    
        byte b[] = greeting.getBytes();     
        fileStream.write(b);    
        System.out.println("File written");       
}catch(Exception e) {
System.out.println(e);
}
}
}

输出:

error:  expected
   try(fileStream){

为了解决此错误,Java 9中对try-with-resource进行了改进,现在我们可以使用未在本地声明的资源的引用。

在这种情况下,如果我们使用Java 9编译器执行上述程序,它将很好地执行而没有任何编译错误。

Java 9 try-with-resource示例

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class FinalVariable {
public static void main(String[] args) throws FileNotFoundException {
FileOutputStream fileStream=new FileOutputStream("javatpoint.txt");
try(fileStream){
 String greeting = "Welcome to javaTpoint.";    
        byte b[] = greeting.getBytes();     
        fileStream.write(b);    
        System.out.println("File written");       
}catch(Exception e) {
System.out.println(e);
}
}
}

输出:

File written