Java9 Try-with-resource机制

1 Java7 Try-with-resource机制

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

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

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

2 Java7 Try-with-resource案例:资源块内声明

/**
 * 一点教程网: http://www.yiidian.com
 */
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之外。

3 Java7 Try-with-resource案例:资源块外声明

/**
 * 一点教程网: http://www.yiidian.com
 */
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: <identifier> expected
		   try(fileStream){

以上代码,编译器会生成一条错误消息。

4 Java9 Try-with-resource案例

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

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

/**
 * 一点教程网: http://www.yiidian.com
 */
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

 

热门文章

优秀文章