当前位置: 首页 > 知识库问答 >
问题:

是否接受关闭try块中的资源?

缪修德
2023-03-14

一本关于Java的初学者书中有以下代码。这本书也很好地解释了异常,并且由于我理解了异常是如何工作的,我得到了一个关于下面代码的问题。

由于某种原因,如果FileWriter类抛出异常,writer.close()将不会被执行。因此,我认为关闭writer对象的最佳位置是在finally块中。甚至在此之前,我已经看到过许多这样编写的代码,其中资源将在try块本身中关闭。我认为这样做是没有意义的。只有在没有例外的情况下,资源才会被关闭。

 public static void main(String[] args) {

       try{
         FileWriter writer = new FileWriter("file.txt");
         writer.write("i am writing");
         writer.close();
       }catch(IOException e){
           ex.printStackTrace();
       }

    }

共有1个答案

党源
2023-03-14

我同意@Cyber-Rookie的观点,可能最好在最后一个块中关闭资源。

为了减少编程错误,Java7引入了“试用资源”。

https://docs.oracle.com/javase/tutorial/essential/exceptions/tryresourceClose.html

    try (FileWriter writer = new FileWriter("file.txt")) {
        writer.write("i am writing");
    } catch (IOException e) {
        e.printStackTrace();
    }

编译器将为您添加额外的代码来关闭块末尾的writer

 类似资料:
  • 当只使用一个资源时,Java7 try-with-resources语法(也称为ARM块(自动资源管理))是很好的、简短的和直接的。但是,当我需要声明多个相互依赖的资源时,我不确定什么是正确的习惯用法,例如和包装它的。当然,这个问题涉及包装某些资源的任何情况,而不仅仅是这两个特定的类。 我想出了以下三种选择: 这个很好,很短,但是坏了。因为底层的不是在变量中声明的,所以它永远不会在生成的块中直接关

  • 不管错误情况如何,使用资源尝试是否总是关闭资源?我的意思是考虑以下代码: 会一直关闭吗?我读过Oracle文档,其中说: 无论try语句是正常完成还是突然完成,它都将关闭 因此无论程序正常运行还是抛出异常,它都将起作用。但是,类似或崩溃的情况怎么办?我知道这些条件对块不起作用。那么,使用资源尝试失败的条件是否存在? 这只是我请求的好奇心,谁能说明这一点吗?

  • 我读过很多帖子,人们说在java、语句等中关闭连接,但我没有找到我的问题的答案。 我问我不做Con.close(),但我做所以它会关闭连接或不? 所以我只想知道,当我们关闭结果集时,连接是否会关闭?

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

  • 问题内容: 我有一个使用简单套接字在两个系统之间传递某些字符的应用程序。我的Java应用程序作为服务器运行。我建立了良好的连接,甚至传递了一条消息。但是,发送完一条消息后,我的连接关闭。 从我可以看出来的好像是在关闭时,套接字本身正在关闭吗?!这很不好,因为我有多个要在同一连接上发送的消息。 我吃饱了吗?如何在Java中维护此连接? 问题答案: 是的,关闭任何作家/读者将关闭他们包装的所有其他作家

  • 本文向大家介绍浅谈java7增强的try语句关闭资源,包括了浅谈java7增强的try语句关闭资源的使用技巧和注意事项,需要的朋友参考一下 java7增强的try语句关闭资源 传统的关闭资源方式 使用finally块来关闭物理资源,保证关闭操作总是会被执行。 关闭每个资源之前首先保证引用该资源的引用变量不为null。 为每一个物理资源使用单独的try...catch块来关闭资源,保证关闭资源时引发