Java SE 9:Try-With-Resources Improvements
目录[ 隐藏 ]
发布简要目录:
介绍
Java SE 7:资源尝试基础知识
Java SE 7:资源试用规则
Java SE 9:资源试用改进
介绍
Oracle Corporation将于2017年3月底发布Java新版本:Java SE 9.所以,我想提供一系列有关Java SE 9新功能的帖子。这是我在这个系列中的第八篇文章。
在这篇文章中,我们将讨论Java SE 9中对Try-With-Resources的一些改进。让我们现在开始探索该构造。
Java SE 7:资源尝试基础知识
Java SE 7引入了一个新的构造:Try-With-Resources语句,以便更好地进行异常处理。如果没有这个结构,开发人员必须编写大量冗余和丑陋的代码。如果开发人员忘记了正确关闭资源,我们将在应用程序中遇到资源泄漏问题。
这个新功能的主要目标是:
句法糖
避免写一些提取catch / finally块。
更好的可读代码
无需进行空检查
无需检查资源引用是指引用对象还是null。
更好的资源管理
ARM(自动资源管理)
避免内存泄漏
试用资源示例-1: -
void testARM_Before_Java9() throws IOException{ BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt")); try (BufferedReader reader2 = reader1) { System.out.println(reader2.readLine()); }}
这里我们创建了一个实用程序方法,它创建一个BufferedReader对象来读取文件的内容。如果我们观察上面的代码片段,即使我们有reader1引用BufferedReader对象,我们也应该创建一个重复的“reader2”来在Try-With-Resources中使用它。这是Java SE 7或8版本中的一个小错误或问题。
我们不能在Try-With-Resources语句的try()块中使用任何资源(在Try-With-Resources之外声明)。
以下代码在Java SE 7或8版本中无效。它会抛出编译时错误。
试用资源示例-2: -
void testARM_Before_Java9() throws IOException{ BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt")); try (reader1) { System.out.println(reader1.readLine()); }}
注意: -
如果您想了解有关此组件的更多信息,请阅读本教程:Java SE 7:Try-with-Resources
Java SE 7:资源试用规则
在Java SE 7或8版本中,我们应遵循这些规则以使用Try-With-Resources语句进行自动资源管理(ARM)
任何资源(预定义的Java API类或用户定义的类)都必须实现java.lang.AutoCloseable。
资源对象必须引用最终或有效的最终变量
如果已经在Try-With-Resources语句之外声明了Resource,我们应该使用局部变量重新引用(如上面的Example-1代码所示)
新创建的局部变量在Try-With-Resources语句中有效。
Java SE 9:资源试用改进
Java SE 9为Try-With-Resources语句提供了一些改进。正如我们在前面部分中讨论的那样,Java SE 7或8版本对此语句有一个小问题或错误。
在Java SE 9中,如果我们有一个资源已经在Try-With-Resource语句之外声明为final或者有效的final,那么我们不需要声明一个局部变量。我们可以在Try-With-Resource Statement中使用以前创建的变量而不会出现任何问题,如下所示:
试用资源示例-3: -
void testARM_Java9() throws IOException{ BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt")); try (reader1) { System.out.println(reader1.readLine()); }}
此示例是Java SE 9的有效代码。我们不创建另一个局部变量,如reader2,以引用reader1,如Example-1所示。让我们在Java SE 9 REPL中执行这两个示例来测试它们。
使用Java SE 9 REPL的测试示例-1: -
jshell> void testARM_Before_Java9() throws IOException{ ...> BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt")); ...> try (BufferedReader reader2 = reader1) { ...> System.out.println(reader2.readLine()); ...> } ...> }| created method testARM_Before_Java9() jshell> testARM_Before_Java9() journaldev
使用Java SE 9 REPL的测试示例-3: -
jshell> void testARM_Java9() throws IOException{ ...> BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt")); ...> try (reader1) { ...> System.out.println(reader1.readLine()); ...> } ...> }| created method testARM_Java9() jshell> testARM_Java9() journaldev
这就是“Java SE 9:尝试资源改进”的新功能。我们将在以后的帖子中讨论更多Java SE 9新功能。
如果您喜欢我的帖子或有任何问题/建议/类型错误,请给我发表评论。
感谢您阅读我的教程。
快乐的Java SE 9学习!
共同学习,写下你的评论
评论加载中...
作者其他优质文章