前回の続きで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」をする必要があります。