このページではJavaのfinallyについてお伝えする。
finallyは例外が発生してもしなくても実行したい処理を書くために使う構文だ。try catchを使っていれば必ず使う場面がある。
この際に理解して、覚えてしまおう。
finallyの必要性
Javaのtry catch文には「finally」ブロックを付けることができる。
finallyは読んで字のごとく、最後に実行されるものを指定するための構文だ。
プログラミングではデータベースを開いたり、ファイルを開いたりした場合、それを閉じてコンピュータのリソースを解放しなければならないが、そのような処理は例外が起きても起きなくてもしなければならない処理であるため、finallyに書かれることが多い。
finallyはあくまでも最後に実行するものがあれば書けばいい。finallyは使用しなくてもコンパイルエラーになったりはしない。
finallyの記述方法
finallyは次のように記述する。
try {
正常終了;
} catch(例外クラス 変数名) {
例外処理;
} finally {
例外の発生に関係なく実行する処理;
}
finallyを使用しなくても、tryブロックとcatchブロックに同じ処理を書けば、finallyと同じ処理を行うことは可能であるが、同じコードを2つ書かなければならない。
finallyを使用する場合と使用する場合のサンプルプログラムを比較してみよう。
finallyを使用しない場合
1 2 3 4 5 6 7 8 9 10 |
void testA () { try { FileReader r = new FileReader(“sample.txt”); System.out.print(“ファイルを読み込みました”); System.out.print(“最後に行いたい処理です”); //・・・① } catch (FileNotFoundException e) { System.out.print(“ファイルが存在しませんでした”); System.out.print(“最後に行いたい処理です”); //・・・② } } |
上記のサンプルプログラムでは、「sample.txt」というファイルが存在してもしなくても、「最後に行いたい処理です」という出力を行うことができる。
ただ、①と②は全く同じコードであるため、修正したい場合は2箇所の修正が必要になってしまうため、プログラムとしてよろしくない書き方といえる。
finallyを使用する場合
1 2 3 4 5 6 7 8 9 10 |
void testB() { try { FileReader r = new FileReader(“sample.txt”); System.out.print(“ファイルを読み込みました”); } catch (FileNotFoundException e) { System.out.print(“ファイルが存在しませんでした”); } finally { //・・・① System.out.print(“最後に行いたい処理です”); //・・・② } } |
上記サンプルプログラムの①でfinallyブロックを作成することにより、②の処理が必ず最後に行われる。finallyを使用しない場合と比較して、同じ処理を2つ書く必要性も無く、読みやすく、修正もしやすい書き方になるだろう。
まとめ
このページではJavaでのfinallyの使い方をお伝えした。
try catchを使っていく上で、必ず使うことになる構文だ。ぜひ理解して使いこなせるようにしておこう。