1

我读到我们不需要显式关闭资源,它将由 java 本身关闭,假设我编写了代码。

try(FileInputStream fis = new FileInputStream("");){
  // code to to somethings
}

FileInputStream 将自动关闭,如果在关闭时产生错误,它将抑制该表达式。

那么如果在关闭 FileInputStream 时抛出异常,由于异常会被抑制,所以资源没有关闭,会不会产生资源泄漏?

4

1 回答 1

2

因此,如果在关闭表达式FileInputStream异常时生成,由于表达式异常将被抑制,因此资源不会关闭...

你不知道它没有关闭,只是你在关闭它时遇到了异常。

...它会产生资源泄漏吗?

它可能会也可能不会造成泄漏,但您对此无能为力。如果您尝试关闭该资源,那么您已经完成了您的工作。

但是JB Nizet 提出了一个非常重要的观点:只有在块内(或附加到它的块内)抛出一些其他异常时,异常才会被抑制。如果(或)期间没有异常,则不会抑制关闭资源的异常。tryfinallytryfinally

于 2015-01-25T10:37:05.840 回答