throws文

 Javaで用意されているクラスのメソッドを使うときに、例外処理を記述しないと使えないものがあります。今まで作成したサンプルで、BufferedReaderクラスのreadLineメソッドを使ってきましたが、このメソッドは必ず例外処理を記述する必要があります。

 例外を表すクラスは~Exceptionという名前が付与されています。継承関係をドキュメントで確認するとExceptionクラスを継承していることを確認できます。そのクラスの中でもRuntimeExceptionクラスを継承している例外クラスは例外処理を強制しません。

 例えば、BufferedReaderクラスのreadLineメソッドは、ドキュメントによるとIOExceptionがスローされる可能性があると説明されています。このIOExceptionクラスは継承関係を見てみるとRuntimeExceptionクラスを継承していないので、例外処理を記述しないとコンパイルエラーとなります。

 それに対して、IntegerクラスのparseIntメソッドはNumberFormatExceptionクラスがスローされる可能性があると説明されています。このNumberFormatExceptionクラスは継承関係を見てみるとRuntimeExceptionクラスを継承しているので、例外処理を記述していなくてもコンパイルエラーとはなりません。例外処理を記述せずに実行しもし例外がスローされたら、その時にプログラムが停止して、トレース情報が表示されます。

 例外処理は前節のようにtry~catch文を使うほかに、throws文を使うことができます。この文を使用すると例外処理をthrows文が定義されているメソッドを呼び出したプログラムに依頼することができるようになります。

throws文定義の書式
修飾子 戻り値の型 メソッド名(引数リスト) throws 例外クラス名{
 …
}
修飾子 戻り値の型 メソッド名(引数リスト) throws 例外クラス名, 例外クラス名, {
 …
}

 Run6クラスを見てみましょう。このクラスはreadLineメソッドを使用しているため、例外処理を明示的に記述する必要があります。しかし、try~catch文を記述していません。しかし、コンパイルは成功します。これは、mainメソッドの定義に「throws Exception」と指定されているためです。この記述はmainメソッド内で発生する例外の処理は、mainメソッドを呼び出している処理に任せることができます。呼び出している処理内でtry~catch文が記述されていれば、例外処理が実行されます。

前へ   次へ