Javaのthrowとは?不正な値を例外で知らせる仕組み

Schoo Java入門 初級 第9回 例外処理

本記事は、Schooの「Java入門 初級【2026年版】」第9回「例外処理」を学ぶ前後に、throw の使い方を整理したい方向けの記事です。

throw は、プログラムの中で不正な値や続行できない状態を見つけたときに、その問題を例外として知らせるための書き方です。

例外処理というと try-catch で「受け取る側」に目が向きやすいですが、実際には「問題を見つけた側」が throw で知らせることもあります。

Schoo コースページ:Java入門 初級【2026年版】

throwは何のために使うのか

throw は、「この値のまま処理を続けるとおかしい」と判断した場所で、呼び出し元に問題を知らせるために使います。

  • 年齢や点数など、ありえない値を受け取った
  • HPや在庫数のように、マイナスになってはいけない値が渡された
  • 処理に必要な情報が足りず、このまま進めると結果がおかしくなる

このような場面で、無理に処理を続けるよりも、例外として呼び出し元に知らせたほうが意図がはっきりします。

図解:不正な値を見つけたらthrowで知らせる
正常な値の場合
checkHp(50)
hp は 0 以上
そのまま処理を続ける
不正な値の場合
checkHp(-10)
hp が 0 未満
throw で例外として知らせる
呼び出し元のcatchで受け取る
throw は、問題を見つけた場所から「このまま進めない」と知らせるために使います。

throwの基本形

throw は、知らせたい問題に合う例外オブジェクトを指定して書きます。

throw new IllegalArgumentException("HPは0以上にしてください");

IllegalArgumentException は、メソッドに渡された引数が不正な場合によく使われる例外です。たとえば、HPにマイナスの値が渡された場合は、引数として不自然だと判断できます。

不正な値をチェックしてthrowする

次の例では、HPが0未満の場合に「この値では処理を続けられない」と例外で知らせます。

static void checkHp(int hp) {
    if (hp < 0) {
        throw new IllegalArgumentException("HPは0以上にしてください");
    }

    System.out.println("HPチェックに成功しました");
}

hp < 0 の場合、throw の行で例外が発生します。そのため、その下にある System.out.println("HPチェックに成功しました"); は実行されません。

逆に、hp が0以上であれば throw は実行されず、通常どおり成功メッセージの行まで進みます。

throwした例外はcatchで受け取る

throw で知らせた例外は、呼び出し元の try-catch で受け取れます。

try {
    checkHp(-10);
    System.out.println("HPチェックに成功しました");
} catch (IllegalArgumentException e) {
    System.out.println("エラー:" + e.getMessage());
}

System.out.println("処理を継続します");

checkHp(-10) を呼び出すと、checkHp メソッドの中で例外が発生します。すると、try の中にある次の行には進まず、対応する catch に移ります。

図解:throwした例外はcatchへ渡る
try {
    checkHp(-10);
    System.out.println("成功");
} catch (IllegalArgumentException e) {
    System.out.println(e.getMessage());
}
1. 呼び出す
checkHp(-10) でHPをチェックする
2. 例外を投げる
throw した時点で、そのメソッドの通常処理から外れる
3. catchで受け取る
呼び出し元にある対応する catch が実行される
throw は、その場でメッセージを表示する命令ではありません。例外オブジェクトを使って、対応する catch へ問題を知らせます。

throwとthrowsの違い

throw と似た言葉に throws があります。名前は似ていますが、役割は違います。

  • throw:例外として問題を知らせる
  • throws:そのメソッドから例外が外へ出る可能性があることを宣言する

まずは、throw は「問題を例外として知らせる命令」、throws は「このメソッドは例外を外に出す可能性があるという宣言」と分けて考えると整理しやすくなります。

何でもthrowすればよいわけではない

throw は便利ですが、通常の条件分岐で対応できることまで例外にする必要はありません。例外は、通常の処理として続けるよりも、いったん処理の流れを変えたほうがよい場面で使います。

たとえば、入力欄が空なら再入力してもらうだけでよい場合もあります。一方で、メソッドの前提としてありえない値が渡された場合は、throw で早めに知らせるほうが原因を見つけやすくなります。

確認問題

  1. throw は、どのようなときに使いますか。
  2. throw new IllegalArgumentException(...) は、何をしているコードですか。
  3. throwthrows の違いを簡単に説明してください。

演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。

あわせて読みたい関連記事

まとめ

throw は、不正な値や続行できない状態を見つけたときに、その問題を例外として知らせるための書き方です。throw した例外は、呼び出し元の catch で受け取れます。まずは、「問題を見つけた場所で例外として知らせ、対応する場所で受け取る」という流れを押さえましょう。

info

シェアする