続・とってもわかりやすいJAVA 【第26回 例外処理④】


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

  • このエントリーをはてなブックマークに追加

PAGE TOP