throw文

2016年11月12日構文

スポンサーリンク

こんにちは。「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節は必須ではありません。

スポンサーリンク

おすすめQAサイト

エンジニア特化型Q&Aサイト【teratail(テラテイル)】:
このサイトはプログラミング特化型のQAサイトです。ソースを見やすく整形させた状態で表示させることが出来ます。