カテゴリ: 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によりキャッチされ、適切に処理されています。

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の例外処理の一覧へ
新着記事
FlutterのInheritedWidgetとは?仕組みと活用方法
FlutterのInheritedWidgetとは?仕組みと活用方法を初心者向けにやさしく解説
Blocパターンの仕組みと導入方法をわかりやすく解説
FlutterのBlocパターンを完全ガイド!初心者でもわかる状態管理と導入方法
Flutterのプロジェクト作成コマンドとディレクトリ構成を学ぼう
Flutterのプロジェクト作成コマンドとディレクトリ構成を学ぼう
Flutterのウィジェットとは?初心者向けに仕組みと使い方を解説
Flutterのウィジェットとは?初心者向けに仕組みと使い方を解説
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
Java のインターフェースとは?普通のクラスとの違いを学ぼう
Javaのインターフェースとは?普通のクラスとの違いを学ぼう【初心者向け解説】
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説