前回の続きでthrowsについて説明していきます。
■throws
前回と重複しますが、例外処理の方法は2種類。
「try-catch」か「throws」です。
「try-catch」は投げられた例外をキャッチできますが、「throws」はできません。
では「throws」は何をするのでしょう?
実はメソッドの呼び出し元に例外を丸投げします。
なのでthrowsはメソッドに記述します。
構文は以下のようになります。
【修飾子】 戻り値の型 メソッド名 ( 引数リスト ) throws 例外クラス1, 例外クラス2 {
// 処理
}
メソッドの()の後ろに発生する可能性のある例外クラスを記述していきます。
サンプルで確認してみます。
■SampleThrows_01.java
import java.io.IOException; public class SampleThrows_01 { public static void main(String[] args) { } static void callingMethod() { calledMethod(); } static void calledMethod() { throw new IOException(); // 例外オブジェクトの生成 } }
■解説
このプログラムはコンパイルエラーになるため実行できません。
エラー箇所は12行目です。
この行では例外を明示的に発生させているのですが、IOExceptionはchecked例外なので必ず「try-catch」か「throws」が必要となります。
try-catchは前回やったので今回はthrowsを書いてみます。
■SampleThrows_02.java
import java.io.IOException; public class SampleThrows_02 { public static void main(String[] args) { } static void callingMethod() { calledMethod(); } static void calledMethod() throws IOException { throw new IOException(); // 例外オブジェクトの生成 } }
■解説
今回もコンパイルエラーが発生してしまいます。
ただし、エラー箇所が8行目に変わっています。
calledMethodを呼び出している箇所ですね。
最初に述べた通り、throwsはメソッドの呼び出し元に例外を丸投げします。
calledMethod()で発生した例外が、callingMethod()に丸投げされているわけです。
なので8行目でコンパイルエラーとなります。
コンパイルエラーをなくすためにはcallingMethod()で「try-catch」か「throws」をする必要があります。