gpt4 book ai didi

java - 在 try block 内声明 RandomAccessFile 对象会发出资源泄漏警告,但在外部声明则不会?

转载 作者:太空宇宙 更新时间:2023-11-04 14:25:02 25 4
gpt4 key购买 nike

这是我的代码:

try {
RandomAccessFile srcFile = new RandomAccessFile("src.txt", "rw");
} catch(FileNotFoundException e) {
e.printStackTrace();
}

此代码向我发出警告,指出 RandomAccessFile 对象 srcFile 永远不会关闭。

但是,如果我修改代码并在 try block 之外声明 srcFile(如下面的代码所示),警告就会消失。

RandomAccessFile srcFile;
try {
srcFile = new RandomAccessFile("src.txt", "rw");
} catch(FileNotFoundException e) {
e.printStackTrace();
}

为什么会发生这种情况,因为我在任何情况下都没有执行 srcFile.close(); 操作?

最佳答案

摘自this :

If a resource is stored in a field, no single method is considered as responsible for closing; no problem is reported.

我认为这就是在 try 范围之外声明 srcFile 时发生的情况。这意味着 Eclipse 编译器不能假设该资源需要关闭,因为 I 可能仍然在创建的范围之外被引用。

从 JDK 1.7 开始,您可以使用 try-with-resources 解决此问题:

try (RandomAccessFile srcFile =  new RandomAccessFile("src.txt", "rw")) {
//Do something with srcFile
} catch(IOException e) {
e.printStackTrace();
}

请注意,srcFile将在执行try后自动关闭。

关于java - 在 try block 内声明 RandomAccessFile 对象会发出资源泄漏警告,但在外部声明则不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26775874/

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