Java在Java 7中引入了try-with-resource功能, 该功能有助于在使用后自动关闭资源。
【Java 9 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("srcmini.txt");
){
String greeting = "Welcome to srcmini.";
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("srcmini.txt");
try(fileStream){
String greeting = "Welcome to srcmini.";
byte b[] = greeting.getBytes();
fileStream.write(b);
System.out.println("File written");
}catch(Exception e) {
System.out.println(e);
}
}
}
输出:
error: <
identifier>
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("srcmini.txt");
try(fileStream){
String greeting = "Welcome to srcmini.";
byte b[] = greeting.getBytes();
fileStream.write(b);
System.out.println("File written");
}catch(Exception e) {
System.out.println(e);
}
}
}
输出:
File written
推荐阅读
- Java 9下划线
- Java 9 Stream API改进
- Java 9 @SafeVarargs注解
- Java 9模块系统
- Java 9 Process API改进
- Java 9新版本字符串方案
- Java 9新功能
- Java 9控制面板
- Java 9工厂方法