(Windows 7、Eclipse Juno 4.2.1、および Java 7 SE を使用して) いくつかのテストを行ったところ、メソッドが catch ブロックで明示的に返されず、オブジェクトが 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 の問題ですか?