カテゴリ: Javaの例外処理 更新日: 2025/11/08

Javaのthrowsキーワードの使い方とは?例外処理を呼び出し元に渡す基本を解説

350
Java の throws キーワードとは?例外を呼び出し元に渡す方法

先生と生徒の会話形式で理解しよう

生徒

「先生、Javaで例外をメソッドの中じゃなくて、呼び出し元に渡すことってできるんですか?」

先生

「もちろんできますよ。そのときに使うのがthrowsキーワードです。」

生徒

「えっ、throwと何が違うんですか?」

先生

「いい質問ですね。それではthrowsキーワードの基本から実例まで丁寧に解説していきましょう!」

1. Javaのthrowsキーワードとは?

1. Javaのthrowsキーワードとは?
1. Javaのthrowsキーワードとは?

Javaのthrowsキーワードは、メソッドの宣言時に使用し、そのメソッド内で発生する可能性がある例外を、呼び出し元に伝えるために使います。これにより、メソッド内で例外を処理せず、呼び出し側でまとめて例外処理を行うことができます。

Javaの例外処理においては、チェック例外(checked exception)を扱う際に、throwsを使うことが多いです。未処理のチェック例外があると、コンパイルエラーになりますので、throwsで明示することでエラーを防げます。

2. throwとの違いを整理しよう

2. throwとの違いを整理しよう
2. throwとの違いを整理しよう

Java初心者がよく混乱するのがthrowthrowsの違いです。

  • throw:実際に例外を発生させる
  • throws:そのメソッドで発生しうる例外を、呼び出し元に伝える

つまりthrowは例外オブジェクトを投げる命令で、throwsはその「投げうる可能性」を宣言するキーワードです。

3. throwsキーワードの基本的な使い方

3. throwsキーワードの基本的な使い方
3. throwsキーワードの基本的な使い方

Javaのthrowsキーワードは、メソッドの定義において使用し、以下のように記述します。


public class ThrowsExample {
    public static void main(String[] args) {
        try {
            readFile();
        } catch (Exception e) {
            System.out.println("例外をキャッチしました: " + e.getMessage());
        }
    }

    public static void readFile() throws Exception {
        throw new Exception("ファイルが見つかりませんでした");
    }
}

この例では、readFile()メソッド内で例外を発生させ、それをthrowsで呼び出し元に投げています。呼び出し元のmain()メソッドでtry-catchによりキャッチされ、適切に処理されています。

Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

4. 複数の例外をthrowsで宣言する

4. 複数の例外をthrowsで宣言する
4. 複数の例外をthrowsで宣言する

Javaでは、複数の例外が発生する可能性がある場合、throwsでカンマ区切りで指定することが可能です。


public static void process() throws IOException, SQLException {
    if (new Random().nextBoolean()) {
        throw new IOException("IOエラー");
    } else {
        throw new SQLException("DBエラー");
    }
}

このようにIOExceptionSQLExceptionを同時に宣言できます。呼び出し元では、両方の例外をキャッチして処理する必要があります。

5. throwsが必要なケースとは?

5. throwsが必要なケースとは?
5. throwsが必要なケースとは?

Javaのthrowsキーワードが必要になるのは主にチェック例外です。たとえば、FileReaderなどのファイル操作、SQLExceptionなどのデータベースアクセス処理では、throwsが必須になります。

一方で、実行時例外(unchecked exception)であるNullPointerExceptionArrayIndexOutOfBoundsExceptionなどは、throwsしなくても構いません。

6. throwsを使うべき場面と設計の考え方

6. throwsを使うべき場面と設計の考え方
6. throwsを使うべき場面と設計の考え方

Javaでは、例外処理の責任を明確に分けることが重要です。メソッド内で処理できない例外は、呼び出し元に投げる(throws)のが基本設計方針です。たとえば、ライブラリやAPIのメソッドでは、内部の詳細に依存しないように、例外を呼び出し元に任せることが多いです。

逆に、アプリケーションのエントリーポイント(mainなど)では、try-catchでしっかり例外をハンドリングするべきです。

7. throwsを使うときの注意点

7. throwsを使うときの注意点
7. throwsを使うときの注意点
  • throwsで宣言した例外は、必ずどこかでcatchする
  • throwsが多すぎると、コードが読みにくくなる
  • 共通の親クラス(Exceptionなど)でまとめる手もある

例外の種類が多くなると、throws句も長くなり、メソッドの読みやすさが低下します。ExceptionIOExceptionなど、親クラスにまとめることで、ある程度整理できます。

8. 呼び出し元での例外処理の実例

8. 呼び出し元での例外処理の実例
8. 呼び出し元での例外処理の実例

それでは最後に、throwsで例外を渡した後、呼び出し元でどう処理するかの例を見てみましょう。


public class ThrowsDemo {
    public static void main(String[] args) {
        try {
            riskyOperation();
        } catch (IOException e) {
            System.out.println("IOエラーが発生しました: " + e.getMessage());
        }
    }

    public static void riskyOperation() throws IOException {
        FileReader reader = new FileReader("data.txt");
        reader.read();
        reader.close();
    }
}

ここではFileReaderを使ってファイルを読み込んでいますが、ファイルが存在しない場合はIOExceptionが発生します。これをthrowsで外に渡し、呼び出し元のmaintry-catchしています。

Javaの例外処理の一覧へ
新着記事
Java の HashMap から特定のキーや値を検索する(containsKey, containsValue)
JavaのHashMapでキーや値を検索する方法を完全解説 containsKeyとcontainsValueの使い方入門
Flutterのリスト表示を学ぼう!ListView・GridViewの使い方
Flutterのリスト表示をマスター!初心者向けListView・GridViewの使い方完全ガイド
Java の HashMap を作成してデータを追加・取得する方法
JavaのHashMapの使い方を完全解説!初心者でもわかる作成・追加・取得の基本
【AWS】S3のエラーコード一覧と原因・対処法【403・404・503など】
【AWS】S3のエラーコード一覧と原因・対処法【403・404・503などを徹底解説】
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク