エラー処理はプログラミングにおいて重要だ。
しかし、すべての予想されるエラーをif文で繋げて書くと、非常に長くなってしまい見にくいコードになってしまう。かと言って省略すれば深刻なバグを引き起こす可能性がある
そんなときに使うのがtry catchだ。このページではJavaの例外処理try catch文を解説する。
Javaによるtry catchの基本
Javaの例外処理の書き方
Javaの例外処理はtry catch文で記述する。JavaはC++から構文を引き継いでいるため、例外処理もC++のtry catch文を踏襲している。try catch文による例外処理は多くのプログラミング言語でも利用される構文なので、必ず覚えておくべきだ。
次のように書く。
try {
正常終了;
} catch(例外クラス 変数名) {
例外処理;
}
基本的な構文の流れとしては、例外が起きる可能性のある処理をtryブロック内に書き、例外が起きた場合の処理をcatchブロック内に書く。
例外処理のサンプルプログラム
ある特定のファイルを読み込むという簡単なプログラムを例にみてみよう。
Javaに限らずプログラムの処理においてファイルを読み込む処理というのはよく使う。読み込もうとしたファイルが存在しない場合、プログラムは続きの処理ができなくなってしまうため停止してしまう。
それを防ぐためにも例外処理が必要になる。
ちなみにJavaではファイルを読み込む処理を行う際には、例外処理の記述がないとコンパイルエラーになる。
「sample.text」というファイルを読み込む処理でみてみよう。「sample.text」ファイルがない場合は例外処理が発生する。
1 2 3 4 5 6 7 8 9 10 |
void testA () { try { // 行いたい処理・・・① FileReader r = new FileReader(“sample.txt”);//・・・② System.out.print(“ファイルを読み込みました”); } catch (FileNotFoundException e) { //・・・③ // 例外処理・・・④ System.out.print(“ファイルが存在しませんでした”); } } |
try catchは上記サンプルのように、①のtryブロックで囲まれた中に行いたい処理を書き、①の処理で例外が発生した場合、④のcatchブロックで記述された例外処理を行う。
②の下記の1文はJavaのFileReaderクラスで「sample.txt」ファイルを読み込む処理だ。
FileReader r = new FileReader(“sample.txt”);
③の上記のcatchの1文はどのような例外をcatchするかを定義している。
「FileNotFoundException」はファイルが存在しなかった場合の例外をcatchするクラスの名前であり、「e」は変数名だ。
catch (FileNotFoundException e)
サンプルプログラムのtestAというメソッドを実行した場合は、以下のような実行結果が考えられる。
「sample.txt」ファイルが存在した場合
- 「ファイルを読み込みました」が出力される。
「sample.txt」ファイルが存在しなかった場合
- 「ファイルが存在しませんでした」が出力される。
複数のcatchブロック
catchブロックは複数記述することもできる。
先ほどのファイルを読み込むサンプルプログラムに「sampleClass」というクラスを読み込む処理を追加して、最後にcatchブロックを一つ追加した。
読み込もうとしたクラスが存在しなかった場合、例外が発生する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void testB () { try { // 行いたい処理 FileReader r = new FileReader(“sample.txt”); System.out.print(“ファイルを読み込みました”); Class c = Class.forName(“sampleClass”); //・・・① System.out.print(“クラスを読み込みました”); } catch (FileNotFoundException e) { //・・・② // 例外処理1 System.out.print(“ファイルが存在しませんでした”); } catch (ClassNotFoundException e) { //・・・③ // 例外処理2 System.out.print(“クラスが存在しませんでした”); } } |
①の下記の1文は「sampleClass」というクラスを読み込んでいる処理だ。
Class c = Class.forName(“sampleClass”);
②の1文は「ClassNotFoundException」はクラスが存在しなかった場合の例外をcatchするクラスの名前であり、「e」は変数名である。
catch (ClassNotFoundException e)
③の一文の「FileNotFoundException」が「ClassNotFoundException」になっている。
これは②とcatchする例外が違うことを意味している。発生する例外は様々あり、例外ごとに適切な処理を記述する必要がある。
サンプルプログラムの「sample.txt」ファイルが存在しなかった場合は、②の例外処理が実行され、「sampleClass」クラスが存在しなかった場合は③の例外処理が実行される。
サンプルプログラムのtestBというメソッドを実行した場合は、以下のような実行結果が考えられる。
「sample.txt」ファイルが存在しなかった場合
- 「ファイルが存在しませんでした」が出力される。
「sample.txt」ファイルが存在した場合かつ「sampleClass」クラスが存在する場合
- 「ファイルを読み込みました」が出力される。
- 「クラスを読み込みました」が出力される。
「sample.txt」ファイルが存在した場合かつ「sampleClass」クラスが存在しない場合
- 「ファイルを読み込みました」が出力される。
- 「クラスが存在しませんでした」が出力される。
まとめ
このページではJavaのtry-catchについてご紹介した。Javaプログラマーであれば、100%書くことになるので、必ず理解をしておこう。
エラーが起こる0で割るプログラムなどを実際に打ってみて、自分の手でも確認してみていただきたい。
コメント