Java 9 try-with-resource功能

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

    推荐阅读