2014-11-06 64 views
1

这是我的代码:在try块内声明RandomAccessFile对象会导致资源泄漏警告,但在外面声明它不会?

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();

回答

0
this从提取

如果一个资源被存储在字段中,没有单一的方法被认为是 负责闭合;没有问题被报道。

我想这是宣布srcFiletry的范围时发生了什么。这意味着月食编译器不能假设资源需要被关闭,因为我仍然可以在创建范围之外引用

由于JDK 1.7,你可以用try-with-resources解决这个问题:

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

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

相关问题