Javaの例外処理におけるthrowとthrows──なぜこの名前なの?英語と文法の観点から解説!

こんにちは。ゆうせいです。

今回は、Javaの例外処理に出てくる2つの似たようなキーワード──

  • throw
  • throws

この微妙に違う単語たちのネーミングの由来について、英語の文法やJavaの設計思想から解説していきます!

「スペルが似ててややこしい…」と思ったこと、ありませんか?一度ちゃんと意味を理解すると、どちらもスッと頭に入るようになりますよ。


まず結論!throwthrowsはどう違う?

キーワード役割使い方の文脈
throw実際に例外を「投げる(発生させる)」メソッド内部で使う
throws例外を「投げる可能性がある」と宣言するメソッド定義のときに使う

英語の文法から見てみよう

throw:動詞の原形

throwは英語で「投げる」という動詞の原形です。

  • I throw the ball.(私はボールを投げる)

Javaでも、throwはまさに例外という「ボール」を投げる操作です:

throw new IOException("ファイルが見つかりません!");

「今まさに投げている」瞬間を表しています。


throws:三単現の形ではなく、sがついた特別な意味

Javaのthrowsは、単なる三単現(三人称単数現在)のsではありません。

実際には、「このメソッドは例外を投げる可能性があるよ!」という宣言として使われます。

public void readFile() throws IOException {
    // ファイル読み込み処理
}

これは英語で言えば:

  • This method throws an IOException.(このメソッドはIOExceptionを投げる)

という文章に対応しています。


なぜ似た名前を使ったのか?

意図的に「セット感」を出すため

Javaを設計した人たちは、throwthrows同じ語源にして、ペアとして理解しやすくすることを意図しています。

たとえば:

  • throw → 実際に投げる(動作)
  • throws → 投げる可能性があると表明(宣言)

これは、try-catch-finallyのように、「一貫した用語の統一性」による理解のしやすさを狙っています。


たとえ話で覚えよう!

野球にたとえてみましょう。

  • throw:今、ピッチャーがボールを投げる!(実行)
  • throws:ピッチャーはボールを投げる可能性がありますよ、気をつけてね!(宣言)

呼び出し側(catcher)がちゃんと構えておかないと、受け取れずにミスになります。


コードで比較してみよう

// throws:投げる可能性を宣言
public void dangerousMethod() throws IOException {
    // throw:実際に例外を発生させる
    throw new IOException("重大なエラー発生!");
}

このように、「宣言と実行」が1セットで動いています。


今後の学習の指針

このような細かい言語仕様の背景には、英語圏の文化的・言語的な設計思想が関係しています。

今後の学習では次の点を意識してみましょう:

  • 英単語の意味をそのままコードに当てはめて理解する
  • 宣言(throws)と動作(throw)の違いを意識する
  • 実際に例外を自作して、throw/throwsの使い分けを練習する

プログラムは言語であると同時に、思想を表す手段です。単なる記号ではなく、そこに込められた「考え方」まで読み解けると、新人エンジニアの皆さんも一歩先の理解に進めますよ!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。