カテゴリ: Javaの例外処理 更新日: 2026/05/04

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のthrowsキーワードとは、具体的にどのような役割を持つ命令なのでしょうか?

Javaのthrowsキーワードは、メソッドの宣言部分で使用され、そのメソッドの内部で発生する可能性がある例外を、自分自身で処理せずに「呼び出し元のメソッド」へ丸投げして渡すための役割を持っています。これにより、エラーが発生した際の対処をその場で行うのではなく、プログラムの実行を依頼した上位の階層で一括管理することが可能になります。例外を呼び出し元に伝えるという宣言を行うことで、プログラムの堅牢性を高めるための重要な仕組みです。
Javaの例外処理の一覧へ
新着記事
Python
NumPyのdtypeとは?データ型の意味と仕組みを初心者向けに解説
NumPyのdtypeとは?データ型の意味と仕組みを初心者向けに徹底解説
Dart
Dartのクラスの作り方!定義・インスタンス生成の基礎
Dartのクラスの作り方を完全解説!初心者でも理解できるクラス定義とインスタンス生成の基礎
Java
Javaの同一性と同値性
Javaの同一性と同値性をわかりやすく解説!初心者向けの基礎知識
AWS
【AWS】s3 lsコマンドの使い方まとめ【オプション・ワイルドカード・日付指定】
【AWS】s3 lsコマンドの使い方まとめ【オプション・ワイルドカード・日付指定】
人気記事
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
AWS
【AWS】S3の料金体系まとめ!無料枠・課金ポイント・見積もり方法まで
【AWS】S3の料金体系まとめ!無料枠・課金ポイント・見積もり方法まで

🔌 USBポート不足を解消

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

UGREEN USB-Cハブを見る

※ Amazon広告リンク