いったように、tryステートメントで処理全体を囲んだ上でfinally内でclose()を呼び出すようなソースを書く必要がありました。{br.close();}}Java7からは、下記のように簡略化できるようになりました。{System.out.println(br.readLine());}セミコロンで区切る事によって、複数の変数をclose()対象にする事もできます。{System.out.println(br.readLine());System.out.println(br2.readLine());}tryステートメント内での自動クローズですが、java.lang.AutoClosableインターフェイスを実装しているクラスであれば利用する事ができます。AutoClosable#closeは、finallyの直前に呼び出されます。{System.out.println("close()");}}実行結果は下記のようになります。finally処理の直前にclose()メソッドがコールされている事が分かります。beginprocess...close()finallyendAutoCloseable#closeメソッド内でExceptionが発生した場合はそのままthrowされます。この動作を検証するサンプルは下記の通りです。}実行結果は下記のようになります。Test.main(Test.java:14)スタックトレースを見てみると、Test.java:14となっており、finallyの直前でExceptionが投げられた扱いになっている事が分かります。AutoCloseable#close内でExceptionが投げられた場合であっても、親ルーチン内のfinallyが呼び出されている事が分かります。Java7のメニューへ戻る[grushブログ]当サイトはリンクフリーです。どこへでもリンクして頂いて結構です。おいては当サイト及び製作者は一切の責任を負いません。