java7 try-with-resources 很香
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java7 try-with-resources 很香,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3626字,纯文字阅读大概需要6分钟。
内容图文
![java7 try-with-resources 很香](/upload/InfoBanner/zyjiaocheng/637/1c56c90c68d043c1a06e8a0f6217c9f5.jpg)
Java 7为懒惰的Java开发人员带来了一些非常好的功能。尝试资源是这种功能之一,它可以减少代码行,并使代码更健壮。在本教程中,我将讨论有关此功能的内容。
1.资源清除的旧方法(在Java 7之前)
**我们长期以来一直在这样做。例如,从文件系统读取文件。代码可能看起来有所不同,但流程如下例所示:
public class ResourceManagementBeforeJava7
{
public static void main(String[] args)
{
BufferedReader br = null;
try
{
String sCurrentLine;
br = new BufferedReader(new FileReader("C:/temp/test.txt"));
while ((sCurrentLine = br.readLine()) != null)
{
System.out.println(sCurrentLine);
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (br != null)
br.close();
}
catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
这些类型的代码在具有大量IO操作的应用程序代码库中非常常见。
try和catch块中的代码本质上很重要,并且具有一些特定于应用程序的逻辑。但是,终于封锁了吗?在大多数情况下,finall块只是被复制粘贴,目的是通过关闭它们来避免损坏资源。
当您有3-4个这样的资源要在单个finally块中关闭时,这些final块看起来更难看。当我们知道时,您是否不认为这些final块不必要地存在,我们必须以任何方式关闭资源而没有任何例外情况?
Java 7通过try-with-resources功能解决了这个问题。#
2.使用try-with-resources的新方法(语法示例)
现在看看在Java 7中打开和关闭资源的新方法。
public class ResourceManagementInJava7
{
public static void main(String[] args)
{
try (BufferedReader br = new BufferedReader(new FileReader("C:/temp/test.txt")))
{
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null)
{
System.out.println(sCurrentLine);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
有两件事需要密切注意:
- 文件资源(BufferedReader)以特殊方式在try块中打开(在小括号内)。
- finally块完全消失了。
最后但并非最不重要的一点是,代码看起来很漂亮且易于阅读。很好,对吗?但是它实际上是如何工作的?
3.实际如何运作?
在Java 7中,我们有一个新的超级接口java.lang.AutoCloseable**。该接口有一种方法:
void close() throws Exception;
Java文档建议此接口在不再需要时必须关闭的任何资源上实现。
当我们在特殊的try-with-resource块中打开任何此类AutoCloseable资源时,在try块完成后,JVM会对在“ try()”块中初始化的所有资源立即调用close()方法。
例如,BufferedReader已实现close()方法文件如下:
public void close() throws IOException {
synchronized (lock) {
if (in == null)
return;
in.close();
in = null;
cb = null;
}
}
由于上述方法定义,当JVM调用此方法时,所有基础流或IO资源都将关闭。
4.向自定义资源添加功能
好吧,这是一个很好的资源清理设计。但是它仅适用于JDK本机类吗?没有。您也可以将其用于自定义资源。
例如,我在以下代码中创建了一个自定义资源:
public class CustomResource implements AutoCloseable
{
public void accessResource() {
System.out.println("Accessing the resource");
}
@Override
public void close() throws Exception {
System.out.println("CustomResource closed automatically");
}
}
现在,我将在示例代码中使用它:
public class TryWithCustomResource
{
public static void main(String[] args)
{
try(CustomResource cr = new CustomResource())
{
cr.accessResource();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Putput in console:
Accessing the resource
CustomResource closed automatically
控制台中的输出清楚地证明,try块完成后,资源将自动关闭。
5.总结
这就是Java 7中使用try-with-resources进行自动资源管理的全部内容。让我们逐点记下重点内容:
- 在Java 7之前,我们必须使用finally块来清理资源。最后,块不是强制性的,但是清理资源是为了防止系统损坏。
- 使用Java 7,无需显式的资源清理。它是自动完成的。
- 在try-with-resources块(try(…){…})中初始化资源时完成自动资源清理。
- 由于发生了新界面AutoCloseable,因此发生了清理。try块完成后,JVM将立即调用其close方法。
- 如果要在自定义资源中使用此功能,则必须实现AutoCloseable接口。否则程序将无法编译。
- 您不应在代码中调用close()方法。JVM应该自动将其称为。手动调用它可能会导致意外结果。
学习愉快!
内容总结
以上是互联网集市为您收集整理的java7 try-with-resources 很香全部内容,希望文章能够帮你解决java7 try-with-resources 很香所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。