我做了一些测试(使用 Windows 7、Eclipse Juno 4.2.1 和 Java 7 SE),发现如果方法没有在 catch-block 中显式返回,并且如果在 try/catch 之外声明了对象,则没有“资源泄漏”警告信号。
不产生“资源泄漏”:
public void extISImReturnNoWarning() {
InputStream is = null;
try {
is = new FileInputStream("A");
is.available();
} catch (IOException e) {
}
}
代码中的小改动会产生“资源泄漏”:
public void locISImReturnHasWarning() {
try {
InputStream is = new FileInputStream("A");
is.available();
} catch (IOException e) {
}
}
public void extISExReturnHasWarning() {
InputStream is = null;
try {
is = new FileInputStream("A");
is.available();
} catch (IOException e) {
return;
}
}
所有方法在功能上似乎都是相同的——那么解释是什么?如果这是一个错误,这是 Eclipse 还是 Java 问题?