Java言語の例外(exception)は、実行時に、
・プログラムの誤まった振る舞いを検査・JavaVMへ通知する
・適切なエラー処理とその回避
を行なうための機構である。例えば、以下のような状況は、「例外」と考えられる。
- 配列の長さを越えた添字で、その要素を参照しようとする
- ファイルをオープンしようとしたが、そのファイルが存在しない
- メソッドに与えられた引数が、(範囲を越えるなど)異常な値である
- オブジェクトを沢山生成し、メモリが足りなくなった
プログラマは、このようないかなる状況においても、プログラムの実行を続けるため、異常終了を回避する措置を講じなければならない。
そうでなければ、OSへロードされたプログラムが停止してしまうのであるから、停止後は「手も足も出ない」状態に陥る危険性がある。
例えば、C言語ソースプログラムをビルドして生成したローダブルモジュール(a.out)は、OSにロードされて実行しているが、異常終了してしまった場合、OS側でその異常終了を検出し救済する何らかの機構を組み込んでおく必要がある。これは大変骨の折れる実装である。システムの堅牢性を確保し、異常状態からの回避のための振舞いができるように(エラー処理)、処理の設計を行なう必要がある。
Javaは、そのための機構として、「例外処理」を備えている。例外を検出すると、JavaVMの上で異常状態が回避される。
適切な回避措置が執られれば、システム全体が終了することはないだろう。
JavaVMさえ健全に「生きてさえいれば」あとは、その上で稼動している何らかのJavaプログラムが、それを救済するであろう。例外は、個々のパッケージの性質に基づいて備えられている。
以下の表に、上記 1.〜4. に対応する各種例外の具体例を挙げておく。
例外 | 内容 | チェックされる場所 |
---|---|---|
ArrayIndexOutOfBoundsException FileNotFoundException IllegalArgumentException OutOfMemoryError |
配列の長さを越えた要素の参照 ファイルが見つからない 引数が異常 メモリ不足 |
runtime時 file check時 runtime時 Virtual Machineからの通知 |
2003年10月4日 13:35 更新