我读到我们不需要显式关闭资源,它将由 java 本身关闭,假设我编写了代码。
try(FileInputStream fis = new FileInputStream("");){
// code to to somethings
}
FileInputStream 将自动关闭,如果在关闭时产生错误,它将抑制该表达式。
那么如果在关闭 FileInputStream 时抛出异常,由于异常会被抑制,所以资源没有关闭,会不会产生资源泄漏?
我读到我们不需要显式关闭资源,它将由 java 本身关闭,假设我编写了代码。
try(FileInputStream fis = new FileInputStream("");){
// code to to somethings
}
FileInputStream 将自动关闭,如果在关闭时产生错误,它将抑制该表达式。
那么如果在关闭 FileInputStream 时抛出异常,由于异常会被抑制,所以资源没有关闭,会不会产生资源泄漏?
因此,如果在关闭
表达式FileInputStream
异常时生成,由于表达式异常将被抑制,因此资源不会关闭...
你不知道它没有关闭,只是你在关闭它时遇到了异常。
...它会产生资源泄漏吗?
它可能会也可能不会造成泄漏,但您对此无能为力。如果您尝试关闭该资源,那么您已经完成了您的工作。
但是JB Nizet 提出了一个非常重要的观点:只有在块内(或附加到它的块内)抛出一些其他异常时,异常才会被抑制。如果(或)期间没有异常,则不会抑制关闭资源的异常。try
finally
try
finally