こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

throw文

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