Java / 例外 / resources

Java / 例外 / resources

try-catch 構文の特殊版の記述方式があって、for 文のようなカッコの中に Java コードが書ける。

try に続きカッコの中に固有のインターフェース(AutoCloseable, Closeable)を実装したインスタンスの生成、取得処理を記述する。 try ブロックが終了すると実装されている close メソッドが自動的にキックされる。

ファイル、ネットワーク、データベース等の外部資産を扱うインスタンスはその資産の開放という処理を常に意識してコーディングしなければならない。

そのため以前は finally ブロックで問題が起ころうが何しようがそこで開放していたが、インターフェースを実装して resources 部分に記述すればそちらを呼び出せることになった。

このように書く

try(
    Hoge hoge = new Hoge();
){
    hoge.open();
    hoge.dododo();
    // try のブロックが追わったら hoge が自動開放される
    // ここで暗黙的に hoge.close() がキックされる
}catch(HogeException e){
    // close 処理で例外が発生してもここで捕捉される
    // nanika
}

複数あるなら複数書ける

try(
    Hoge hoge = new Hoge();
    Piyo piyo = new Piyo();
){
}catch(HogeException e){
}

途中で例外発生しても close の実行は保証されている

try(
    Hoge hoge = new Hoge();
){
    hoge.open();
    throw new HogeException();  // ここで抜けるけど close は実行される
    hoge.dododo();
}catch(HogeException e){
    // close 実行後ここに移動する
}
java/basic/exception/resources/start.txt · 最終更新: 2020-10-07 17:39 by ore