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

Des*_*PRG 4 java io exception

一本关于 Java 的初学者书籍中有以下代码。这本书也很好地解释了异常,因为我了解异常是如何工作的,所以我对以下代码提出了一个问题。

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

我错了吗?在java中关闭资源的最佳方法是什么?我们永远不应该编写如下代码吗?

 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();
       }

    }
Run Code Online (Sandbox Code Playgroud)

Bre*_*etC 5

我同意@cyber-rookie,最好在 finally 块中关闭资源。

Java 7 引入了“try-with-resources”以减少编程错误......

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();
    }
Run Code Online (Sandbox Code Playgroud)

编译器会在块的末尾添加额外的代码来为你关闭编写器

  • @DesirePRG - 你可以用分号分隔然后,例如... try ( Resource res1 = new ClosableResource(...); Resource res2 = new ClosableResource(...) ) { ... } (2认同)