Java教程

Java9 try增强功能

Java9 try新特性

Java在Java 7中引入了 try-with-resource 功能,该功能可在使用后自动关闭资源。
换句话说,我们可以说不需要显式关闭资源(文件,连接,网络等),而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("lidihuo.txt");){
             String greeting = "Welcome to lidihuo.";    
                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("lidihuo.txt");
        try(fileStream){
             String greeting = "Welcome to lidihuo.";    
                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进行了改进,现在我们可以使用未在本地声明的资源的引用。
在这种情况下, if我们使用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("lidihuo.txt");
        try(fileStream){
             String greeting = "Welcome to lidihuo.";    
                byte b[] = greeting.getBytes();     
                fileStream.write(b);    
                System.out.println("File written");          
        }catch(Exception e) {
            System.out.println(e);
        }       
    }
}
输出:
File written

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4