例外とは実行時に生じるエラーの事で、ある処理を実行中に例外が生じたらその処理を中断してエラー処理を行う機能のことを「例外処理」と呼びます。
例外処理の書式は以下の通りです。
try { 例外1〜Nが起きる可能性のある処理部 } catch(例外その1){ { 例外1のエラー処理部 } catch(例外その2){ { 例外2のエラー処理部 } ・・・ catch(例外そのN){ { 例外Nのエラー処理部 }
まず「try」のカッコ内に例外が起きる可能性のある処理部を書きます。
次に例外が起きた時のエラー処理部を「catch」のカッコ内に書きます。
もし try の中にある処理で例外が生じたらその処理の実行を中止し、catchの中にジャンプしてエラー処理を実行します(エラー処理が終わっても try の中には戻りません)。
また上の例の様に catch を例外の種類ごとに複数並べることで、種類別にエラー処理することが出来ます。
この様に例外が起きてcatchの中に処理が移ることを「例外が投げられた」と言います。
この例外処理のメリットは「処理部」と「エラー処理部」を分けて書けることにあります。
一般的にエラー処理部は煩雑で見づらい事が多いので、取り敢えずエラー処理は後回しにして処理部だけ書くことで、すっきりと見やすいソースコードになります。
もう少し具体的に例外処理の例を見てみましょう。
次のソース 1 はファイルオープン時に指定したファイル(今回は hoge.txt )が存在しない時に投げられる例外処理です。
※ ファイルの書き込みと読み込みについては次の学習項目で詳しく扱います。
import java.io.FileReader; import java.io.IOException; public class Main { public static void main(String[] args) { try{ FileReader in = new FileReader( "hoge.txt" ); } catch( IOException e ) { System.out.println( "入出力例外発生: "+e ); } } }
try の中で hoge.txt をオープンしていますが、もし hoge.txt が無ければ IOException という名前の例外が生じます。
※ IOException については次のページで説明します
IOException 例外が生じると catch 内に処理が移って、エラーに関する情報が変数 e に入ります。
その e の内容は次の通りです。
入出力例外発生: java.io.FileNotFoundException: hoge.txt (No such file or directory)