- java7から
- try-with-resources文を使用できるのは、
java.lang.AutoCloseable
か
java.io.Closeable
インターフェースの実装しているclass
sample code
class SampleFileReader implements AutoCloseable {
@Override
public void close() throws IOException {
System.out.println("SampleFileReader Close.");
}
}
class SampleBufferedReader implements AutoCloseable {
@Override
public void close() throws IOException {
System.out.println("SampleBufferedReader Close.");
}
}
...
try (SampleBufferedReader br = new SampleBufferedReader();
SampleFileReader fr = new SampleFileReader()) {
throw new IOException();
System.out.println("--start--");
} catch (IOException e) {
System.out.println("--IOException--");
} finally {
System.out.println("--finally--");
}
リソース解放されないパターン
- 以下のコードの場合正常にnewされた場合には問題なくcloseされるが、
- nestした new(例えば new BufferedWriter(..))で例外が発生するとcloseされない
File file = new File("out.txt");
try(PrintWriter pw =
new PrintWriter(new BufferedWriter(new FileWriter(file)));) {
}
References