1

这是我的代码:

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

这段代码给了我一个警告,RandomAccessFile对象 srcFile 永远不会关闭。

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

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

为什么会发生这种情况,因为我srcFile.close();无论如何都没有这样做?

4

1 回答 1

1

从中提取:

如果资源存储在字段中,则没有一个方法被认为负责关闭;没有问题报告。

我认为这是在声明srcFile超出try. 这意味着 eclipse 编译器不能假定资源需要关闭,因为我仍然可能在创建的范围之外被引用。

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

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

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

于 2015-05-13T13:47:53.640 回答