38

Java 7 の try-with-resources では、finally ブロックと自動クローズがどの順序で発生するかわかりません。順番は?

BaseResource b = new BaseResource(); // not auto-closeable; must be stop'ed
try(AdvancedResource a = new AdvancedResource(b)) {

}
finally {
    b.stop(); // will this happen before or after a.close()?
}
4

2 に答える 2

57

リソースは、catch または finally ブロックの前に閉じられます。このチュートリアルを参照してください。

try-with-resources ステートメントは、通常の try ステートメントと同様に、catch および finally ブロックを持つことができます。try-with-resources ステートメントでは、宣言されたリソースが閉じられた後に、catch または finally ブロックが実行されます。

これを評価するサンプル コードは次のとおりです。

class ClosableDummy implements Closeable {
    public void close() {
        System.out.println("closing");
    }
}

public class ClosableDemo {
    public static void main(String[] args) {
        try (ClosableDummy closableDummy = new ClosableDummy()) {
            System.out.println("try exit");
            throw new Exception();
        } catch (Exception ex) {
            System.out.println("catch");
        } finally {
            System.out.println("finally");
        }


    }
}

出力:

try exit
closing
catch
finally
于 2014-06-09T21:09:00.820 に答える