8.3 明示的例外
8.3.1 例外をスローする
これまでの例外は、Java 仮想マシンが不正な処理を検出した時にスローされる実行時例外でした。しかし、実行時に検出される不正なプログラムというのは必ずしも構文的な問題とは限りません。クラスの仕様に反した操作が実行された場合も、例外によって開発者の過ちを伝える必要があると考えられるのです。例えば、正数しか与えてはならないメソッドの引数に負数を指定した場合などは、例外を発生させるべきでしょう。
プログラムが意図的に例外をスローするには throw 文を用います。throw 文が実行された時点で例外がスローされるため、プログラムの制御はその時点で catch の検索に移行します。throw 文は次のように記述します。
throw 式文 ;
式文の結果は、Throwable 型に代入可能な参照型でなければなりません。Throwable またはそのサブクラス以外を指定した場合はコンパイル・エラーとなります。通常は、Exception クラスまたはそのサブクラスを指定します。Exception クラスは Throwable クラスの機能をそのまま継承しています。コンストラクタも同じなので、表 08_02_00 を参照してください。
class Test { public static void main(String args[]) { try { throw new Exception("例外のメッセージ"); } catch(Exception err) { System.out.println(err); } } }
>java Test java.lang.Exception: 例外のメッセージ
コード1の try 文のブロックでは、throw 文を用いて意図的に例外を発生させています。throw 後の式文では Exception クラスのインスタンスを生成しているため Exception 型の例外がスローされます。実行結果を見れば、例外がスローされ、それが catch に取り扱われていることが確認できます。