java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

throw文

投稿日:

最終更新日:2016年08月30日

アイキャッチ

こんにちは。「Javaを復習する初心者」です。

今回はthrow文について復習しました。

throw文を使うと例外をスローすることができます。throw [例外のインスタンス]という書き方です。

例外には2種類あります。

チェック例外
ExceptionクラスとそのサブクラスのうちでRuntimeExceptionのサブクラスでないもの
非チェック例外
RuntimeExceptionクラスとそのサブクラス

チェック例外をthrow

チェック例外をthrow文に記述した場合、その位置によっては更に追加するものがあります。例えば、以下の例はメソッドのブロック直下にthrow文を書いたものです。この例はエラーになります。

エラーあり

    private static void test() {

        throw new Exception();

    }

この状態ではコンパイルエラーが発生します。Eclipseではthrow文の行に赤い波線が出力されます。「処理されない例外の型 Exception」というエラー内容です。チェック例外をthrow文に書いた場合、その位置によってはエラーが出ます。この例では例外処理が全くないためにエラーが出ました。

コンパイルエラーを解消するためには次の2つの方法があります。

  • メソッドにスロー宣言を追加する。
  • try-catch文を追加する。

「メソッドにスロー宣言を追加する。」という方法はメソッドの宣言の箇所に「throws Exception」という文言を追加することです。この文言を追加した場合、呼び出し元で例外処理が必要になります。なので、呼び出し元に例外処理がない場合は呼び出し元でコンパイルエラーになります。

「try-catch文を追加する。」という方法はthrow文をtry-catch文で囲んで例外処理をする方法です。例えば以下のように書きます。

例外処理

        try {
            throw new Exception();
        } catch (Exception e) {
            e.printStackTrace();
        }

例外発生時はcatch節が処理されます。上記ではコンソールにスタックトレースを出力しています。catch節に何も書かなくてもエラーにはなりませんが、例外が起きたのかどうか、実効結果では判断できなくなります。

非チェック例外をthrow

次の例では非チェック例外をthrowしています。コンパイルエラーになりません。

エラーなし

    private static void test() {

        throw new RuntimeException();

    }

この場合、メソッドにthrows節を追加する必要はありませんが、追加してもエラーにはなりません。また、非チェック例外のthrows宣言が記述しているメソッドを呼び出してもtry-catch節は必須ではありません。