当前位置: 首页 > 面试题库 >

实现Closeable或实现AutoCloseable

谷梁建中
2023-03-14
问题内容

我正在学习Java,但是在implements Closeableimplements AutoCloseable接口上找不到任何好的解释。

当我实现an时interface Closeable,我的Eclipse IDE创建了一个方法public void close() throws IOException

我可以在pw.close();没有界面的情况下关闭流。但是,我不明白如何close()使用接口实现该方法。而且,此接口的目的是什么?

我也想知道:如何检查是否IOstream真的关闭?

我正在使用下面的基本代码

import java.io.*;

public class IOtest implements AutoCloseable {

public static void main(String[] args) throws IOException  {

    File file = new File("C:\\test.txt");
    PrintWriter pw = new PrintWriter(file);

    System.out.println("file has been created");

    pw.println("file has been created");

}

@Override
public void close() throws IOException {


}

问题答案:

在我看来,您对接口不是很熟悉。在您发布的代码中,您无需实现AutoCloseable

您仅需要(或应该)实现,Closeable或者AutoCloseable如果您将要实现自己的PrintWriter,该文件将处理需要关闭的文件或任何其他资源。

在您的实现中,只需调用即可pw.close()。您应该在finally块中执行此操作:

PrintWriter pw = null;
try {
   File file = new File("C:\\test.txt");
   pw = new PrintWriter(file);
} catch (IOException e) {
   System.out.println("bad things happen");
} finally {
   if (pw != null) {
      try {
         pw.close();
      } catch (IOException e) {
      }
   }
}

上面的代码与Java 6有关。在Java7中,可以更优雅地完成此操作(请参阅下答案])。



 类似资料:
  • 我正试图通过使用Mockito和监视对象,找出如何跳过单元测试中的非静态void方法调用。 正在讨论的类是: 我正在尝试的单元测试方法是: 在我的单元测试中,我尝试了下面概述的代码,但最终都在“doNot()”行之前抛出了Mockito错误(底部的详细错误): 错误: 任何帮助或建议将不胜感激!

  • 我想知道在Spring项目中更新JPA实体的最佳实践是什么-更新原始实体还是创建新实体?我看到了这两种方法: 使用原始-在原始实体中实现必要的字段,并将更新后的实体保存回存储库 使用复制-手动创建实体的新实例,将原始实体中的所有字段(更新的字段)设置为新实体,并将实体保存回存储库 您使用/推荐什么方法?为什么呢?

  • 问题内容: 我正在做一个需要btree或b + tree数据结构的项目。有谁知道btree或b + tree的现有实现(带有插入,删除,搜索算法)?它应该接受字符串作为输入,并形成这些字符串的btree或b + tree。 问题答案: 在缺少您需要解决的问题的详细信息的情况下,我将允许我自己提出一种 可能 解决您的问题的替代解决方案:改用红/黑树。 可以将红色/黑色树视为b树,如Wikipedia

  • 我将如何实现或在firestore查询?医生身上什么都没有。

  • SPDY 使用 TLS 的扩展称为 Next Protocol Negotiation (NPN)。在Java 中,我们有两种不同的方式选择的基于 NPN 的协议: 使用 ssl_npn,NPN 的开源 SSL 提供者。 使用通过 Jetty 的 NPN 扩展库。 在这个例子中使用 Jetty 库。如果你想使用 ssl_npn,请参阅https://github.com/benmmurphy/ss

  • 问题内容: 我想象我们所有人(当我们可以打扰的时候!)评论我们的界面。例如 您是否也评论了实现(它也可能作为一个库的一部分提供给客户)?如果是这样,您如何管理两者同步?还是只是添加“查看文档界面”注释? 谢谢 问题答案: 作为一般规则,我使用与代码相同的DRY(不重复自己)原理: 在界面上,记录界面 在实施过程中,记录实施细节 特定于Java的 文档:在记录实现时,请使用{@inheritDoc}