gpt4 book ai didi

java - 文件处理的资源泄漏,try with resources VS try-catch-finally with file.close()

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:23 24 4
gpt4 key购买 nike

当涉及到文件处理和资源泄漏时,

这两种处理问题的方法有何优缺点:

try with resources VS Try/catch/finally with file.close?

谢谢

  • 药丸

最佳答案

最大的区别是使用 try-finally 方法屏蔽异常的危险。如果您不小心捕获关闭时finally block 中抛出的任何异常,则可以屏蔽try block 中抛出的任何异常。这意味着如果 try block 中的代码抛出异常,那么 finally 中的代码也会抛出异常,传播的异常是来自 finally block 的异常(通常不是您希望看到的异常)。

try-with-resources 通过确保如果从 try block 抛出异常,则 close 方法抛出的任何异常都会被添加为抑制的异常,从而消除了异常屏蔽的危险。

try block 中没有抛出异常,但在关闭时抛出异常的情况,try-with-resources 的处理方式与使用 try-finally 并捕获 finally block 中抛出的任何内容的处理方式不同。使用 try-with-resources 时,会抛出关闭时抛出的异常(因为没有异常可以将其添加为抑制的异常),而 try-finally 的通常方法是吃掉或记录从 finally 方法抛出的任何异常。因此,如果您不希望 close 失败导致抛出异常,从而破坏一些正常工作的逻辑,您可能希望避免使用 try-with-resources。

一个显着的区别是 try-with-resources 如何允许多个资源。编写 try-finally block 的人通常对嵌套 try block 感到不耐烦,并会导致快捷方式的错误,例如在 finally block 中放置过多的 close 语句(因此,如果其中一个失败,则剩余的语句不会执行,从而导致资源泄漏)。 try-with-resources 保证在退出时以正确的顺序关闭资源,因此不需要嵌套 block 。

关于java - 文件处理的资源泄漏,try with resources VS try-catch-finally with file.close(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36702034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com