Revised: Feb./15th/2003: Since: Jan./27th/2002
メソッドやコンストラクタの定義で、発生しそうな例外を明示しておくことができます。
修飾子 戻り値 メソッド(シグネチャ) throws 例外クラスリスト {
処理
}
コンストラクタ(シグネチャ) throws 例外クラスリスト {
初期化処理
}
throws の後ろに記述する throws リストは、カンマ区切りで複数の例外クラスを記述できます。
このように明示しておくと、当該メソッド利用者に分かりやすいだけではなく、コンパイル時に、スローされた例外が呼び出し元でキャッチされているかどうかチェックされます。キャッチされていなければ、コンパイルエラーになります。コンポーネントの開発者が利用者に対して、例外処理を強制することができるわけですから、予想外の例外が発生することを未然に防げます。
例外処理には二つあって、try {} catch () {}で自力処理するのか、呼び出し元に処理を委譲するかの違いだと言えます。 いずれにしても、制御がメソッドから出る方法として想定できるものをすべて、強制的にコード化しておく仕組みです。他の言語の場合は、実行環境やOSが、コード途中で割り込み/分岐を発生させるものがあります。
class TestThrows {
public static void main(String[] args) {
System.out.println("実行開始");
int i=100,j=0,k=0;
try{
k=cal(i,j);
System.out.println(k);
} catch (ArithmeticException e) {
System.out.println("例外:" + e);
}
System.out.println("実行終了");
}
static int cal(int i, int j) throws ArithmeticException {
return i/j;
}
}
C:\java>javac TestThrows.java C:\java>java TestThrows 実行開始 例外:java.lang.ArithmeticException: / by zero 実行終了
![]() |
| 図:例外処理のフロー |