这是我的代码:
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/