当前位置: 首页 > 编程笔记 >

Java使用 try-with-resources 实现自动关闭资源的方法

潘宪
2023-03-14
本文向大家介绍Java使用 try-with-resources 实现自动关闭资源的方法,包括了Java使用 try-with-resources 实现自动关闭资源的方法的使用技巧和注意事项,需要的朋友参考一下

1、 在Java1.7之前,我们需要通过下面这种方法, 在finally中释放资源,这种方法有点繁琐。

 BufferedReader br = null;
    String str;
    try {
      br = new BufferedReader(new FileReader(""));
      while ((str = br.readLine()) != null) {
        System.out.println(str);
      }
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      if (br != null) {
        try {
          br.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }

2、在java1.7之后,可以使用try-with-resources实现自动关闭资源

try (BufferedReader br = new BufferedReader(new FileReader(""))) {
      while ((str = br.readLine()) != null) {
        System.out.println(str);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }

这样看上去,是不是感觉代码干净了许多,当程序运行完离开try语句块时,( )里的资源就会被自动关闭。

但是try-with-resources还有几个关键点要记住:

①、try()里面的类,必须实现了AutoCloseable接口。
②、在try()代码中声明的资源被隐式声明为fianl。
③、使用分号分隔,可以声明多个资源。

3、自定义类并实现AutoCloseable接口

class TestAutoClosable implements AutoCloseable {

  @Override
  public void close() throws Exception {
    System.out.println("close");
  }

  public void test() {
    System.out.println("test");
  }
  
}

接下来我们测试下,我们写得自定义类

 try (BufferedReader br = new BufferedReader(new FileReader("E:/test.txt"));
       TestAutoClosable testAutoClosable = new TestAutoClosable()) {
      testAutoClosable.test();
    } catch (Exception e) {
      e.printStackTrace();
    }

当调用testAutoClosable.test()方法时,下面是控制台打印的:

test
close

可以看到资源被成功关闭。

到此这篇关于Java使用 try-with-resources 实现自动关闭资源的方法的文章就介绍到这了,更多相关java 自动关闭资源内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 问题内容: 使用try-with-resources语句关闭资源时,是否可以忽略抛出的异常? 例: 还是应该继续关闭? 问题答案: 我在钱币开发邮件列表中找到了这个答案:http : //mail.openjdk.java.net/pipermail/coin- dev/2009-April/001503.html 5. close方法的某些失败可以安全地忽略(例如,关闭已打开以供读取的文件)。

  • 示例: 我没有任何对或的引用,它们也会被关闭吗? 谢啦

  • 问题内容: 如何使用Java 7的自动资源管理(try-with- resources语句)集成创建/接收连接,查询数据库以及可能处理结果的通用JDBC习惯?(教程) 在Java 7之前,通常的模式是这样的: 使用Java 7,您可以: 这将关闭和,但是回滚又如何呢?我无法添加包含回滚的catch子句,因为该连接仅在try块内可用。 您是否还在try块之外定义连接?这里的最佳实践是什么,特别是如果

  • 我在块中创建了数量可变的对象。在任何退出点,我都希望关闭所有分配的资源。 我可以想象自己写一些东西来做这件事,但是有没有类似于Python的Contextlib的现有实用程序。将关闭分配的资源的ExitStack?我希望它看起来像这样: (注意:这不是这个问题,因为我不知道我会提前准备多少资源。)。 嘿,close投票者我不是在要求一个库,我是在问你如何安全地关闭动态数量的s,如果有语言功能,很好

  • try-with-resources语句是一个try语句,其中包含一个或多个正式声明的资源。 这里资源是一个对象,一旦不再需要就应该关闭它。 try-with-resources语句确保在需求完成后关闭每个资源。 任何实现java.lang.AutoCloseable或java.io.Closeable的对象,接口都可以用作资源。 在Java 9之前,资源将在try之前或try语句内部声明,如下面

  • 问题内容: 声纳给出了一个错误,应该将其关闭。我需要修改以下代码才能使用。我该怎么做呢? 问题答案: 当前,代码尚不准备处理异常-您丢失了finally块来关闭打开的流。而且,当然,您是对的-使用try-with-resources解决了这个问题: