个性化阅读
专注于IT技术分析

Java 9 try-with-resource功能

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("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
赞(0)
未经允许不得转载:srcmini » Java 9 try-with-resource功能

评论 抢沙发

评论前必须登录!