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

Javaのtry-catch文とは?初心者でもわかるエラー処理の基本と使い方

348
Java の try-catch 文とは?エラーを防ぐ基本の書き方

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

生徒

「Javaでプログラムが途中で止まることがあるんですが、どうやって防げるんですか?」

先生

「それは例外が発生しているかもしれません。Javaではtry-catch文を使って、そういった問題を防ぐことができますよ。」

生徒

try-catchってどういうふうに使うんですか?」

先生

「それではJavaのtry-catch文の基本的な書き方と、エラー処理の方法について詳しく解説していきましょう!」

1. Javaのtry-catch文とは?

1. Javaのtry-catch文とは?
1. Javaのtry-catch文とは?

Javaのtry-catch文とは、プログラムの実行中に発生する「予期せぬトラブル(例外)」をあらかじめ予測し、安全に処理するための構文です。プログラミングでは、コードが文法的に正しくても、動かしてみた瞬間にエラーが発生してプログラムが強制終了してしまうことがあります。これを「例外(Exception)が発生した」と呼びます。

たとえば、「入力された文字が数字だと思って計算したら、実は漢字だった」「読み込もうとしたファイルが消えていた」といったケースです。try-catchを使えば、こうしたトラブルが起きても「プログラムを突然止めず、エラー用のメッセージを出して処理を続ける」といった柔軟な対応が可能になります。

未経験者向けのイメージ例:落とし穴

プログラムの実行を「道を歩くこと」に例えてみましょう。try-catchを使わない状態は、道に落とし穴(エラー)があった瞬間に、そこで旅が強制終了してしまう状態です。

一方、try-catchを使うのは、「もし落とし穴(try)があったら、網でキャッチ(catch)して、安全に別の道へ誘導する」という備えをしておくようなものです。これによって、アプリやシステムが急に落ちてユーザーを困らせることを防げます。

プログラムでの「落とし穴」の例(数字以外の入力):


public class Sample {
    public static void main(String[] args) {
        // 本来は数字が欲しいところに、あえて「あ」という文字を入れてみる
        String input = "あ";
        
        try {
            // 文字列を数字に変換しようとする(ここでトラブル発生!)
            int number = Integer.parseInt(input);
            System.out.println("変換した数字: " + number);
        } catch (NumberFormatException e) {
            // トラブル(例外)が起きた時の身代わり処理
            System.out.println("「" + input + "」は数字ではないので変換できません!");
        }
        
        System.out.println("プログラムは無事に最後まで動きました。");
    }
}

実行結果:


「あ」は数字ではないので変換できません!
プログラムは無事に最後まで動きました。

もしこのコードにtry-catchがなかったら、「プログラムは無事に最後まで動きました。」という表示すら出ずに、真っ赤なエラーメッセージが出て止まってしまいます。このように、「エラーが起きても止まらない、頑丈なプログラム」を作るために不可欠なのがtry-catchなのです。

2. try-catch文の基本構文を見てみよう

2. try-catch文の基本構文を見てみよう
2. try-catch文の基本構文を見てみよう

まずは、Javaにおけるtry-catch文の基本的な構文を見てみましょう。


public class TryCatchExample {
    public static void main(String[] args) {
        try {
            int result = 10 / 0;
            System.out.println("計算結果: " + result);
        } catch (ArithmeticException e) {
            System.out.println("0で割ることはできません。");
        }
    }
}

このコードでは、10 / 0という計算でArithmeticException(算術エラー)が発生します。tryブロック内で例外が発生すると、処理はcatchブロックに移り、指定された例外を処理します。


0で割ることはできません。

3. 例外が発生しない場合の動作

3. 例外が発生しない場合の動作
3. 例外が発生しない場合の動作

例外が発生しなければ、catchブロックは実行されず、tryブロック内の処理がすべて実行されます。以下は例外が起きない例です。


public class TryCatchNoError {
    public static void main(String[] args) {
        try {
            int result = 10 / 2;
            System.out.println("結果: " + result);
        } catch (ArithmeticException e) {
            System.out.println("算術エラーが発生しました。");
        }
    }
}

結果: 5

このように、正常な処理が行われた場合はcatchはスキップされ、プログラムは通常通り動作します。

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

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

※ Amazon広告リンク

4. 複数のcatchブロックで例外を分類

4. 複数のcatchブロックで例外を分類
4. 複数のcatchブロックで例外を分類

Javaでは、発生する可能性のある例外に応じて複数のcatchブロックを使うことができます。


public class MultipleCatchExample {
    public static void main(String[] args) {
        try {
            String text = null;
            System.out.println(text.length());
        } catch (NullPointerException e) {
            System.out.println("nullのオブジェクトにアクセスしました。");
        } catch (Exception e) {
            System.out.println("その他の例外が発生しました。");
        }
    }
}

nullのオブジェクトにアクセスしました。

例外の種類ごとに処理を分けることで、問題の原因を特定しやすくなり、ユーザーにもわかりやすいメッセージを表示できます。

5. finallyブロックで共通の後処理を記述

5. finallyブロックで共通の後処理を記述
5. finallyブロックで共通の後処理を記述

finallyブロックは、例外が発生しても、しなくても必ず実行される処理を記述する部分です。たとえば、ファイルやデータベースの接続を閉じるなどの「後始末」によく使われます。


public class FinallyExample {
    public static void main(String[] args) {
        try {
            int[] numbers = new int[2];
            System.out.println(numbers[5]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("配列の範囲外にアクセスしました。");
        } finally {
            System.out.println("後処理を実行します。");
        }
    }
}

配列の範囲外にアクセスしました。
後処理を実行します。

このように、リソースの開放や後片付けが必要な場面ではfinallyを活用しましょう。

6. try-catchの注意点とベストプラクティス

6. try-catchの注意点とベストプラクティス
6. try-catchの注意点とベストプラクティス

初心者がtry-catch文を使うときに注意すべきポイントをいくつか紹介します。

  • 必要な処理だけをtryブロックに含める:無関係なコードを含めると、例外発生箇所が特定しづらくなります。
  • catchでは適切な例外クラスを使うExceptionなどの汎用的なクラスではなく、具体的な例外名を使うのがベターです。
  • ログ出力をする:実際の開発現場では、System.out.println()ではなくログライブラリを使って記録します。
  • 例外を握りつぶさない:何が起きたかわからなくなるため、エラーメッセージやスタックトレースは残しましょう。

例外処理は「異常系の処理」ですが、エラーに強いコードを書くために欠かせない技術です。

7. throwsとの違いも知っておこう

7. throwsとの違いも知っておこう
7. throwsとの違いも知っておこう

try-catchは例外を「捕まえる」仕組みですが、throwsは例外を「投げる(通知する)」ために使われます。

たとえば、メソッド内で例外が発生する可能性がある場合、呼び出し元にそのことを伝えるためにthrowsを使います。


public class ThrowsExample {
    public static void main(String[] args) throws Exception {
        throw new Exception("強制的に例外を発生させました。");
    }
}

Exception in thread "main" java.lang.Exception: 強制的に例外を発生させました。

初心者のうちはtry-catchに集中すればOKですが、throwsも例外処理の一部として知っておくと理解が深まります。

まとめ

まとめ
まとめ

Javaの例外処理におけるtry-catch文は、複雑なプログラムでも安全に実行を続けられる大切な仕組みです。配列の範囲外参照や算術エラー、nullアクセスといった予期しない問題が発生したとき、try-catch文を適切に使うことでプログラム全体の安定性を高められます。とくに初心者にとっては、例外という概念そのものが理解しづらい場面も多いですが、「例外が起きたらcatchに処理が移る」という流れを押さえるだけでも、コードの動きがずっと見やすくなります。さらに複数の例外を分類するcatchブロックや、必ず実行されるfinallyブロックの存在を理解することで、ファイル操作やデータベース接続といった後処理が必要な処理にも対応できるようになります。 また、tryの中には必要な処理だけを記述し、具体的な例外クラスでcatchすることが、読み手にもやさしいコードにつながります。開発が進むほどログ記録や例外の再スローなど、より高度な例外処理が求められる場面も増えていきますが、まずは基本をしっかり押さえて、例外が発生してもプログラムが止まらずに実行される安全な土台を作ることが重要です。 ここでは記事全体を通して学んだポイントをふまえつつ、例外処理の流れを簡易的な構造としてまとめたサンプルプログラムを示します。

サンプルプログラム(例外処理の流れを再確認)


public class SummaryTryCatch {
    public static void main(String[] args) {
        try {
            String text = null;
            System.out.println(text.length());
        } catch (NullPointerException e) {
            System.out.println("ぬるの値にアクセスしたため例外が発生しました。");
        } catch (Exception e) {
            System.out.println("その他の問題が発生しました。");
        } finally {
            System.out.println("さいごに必ず実行される処理です。");
        }
    }
}

このサンプルでもわかるように、tryの内部で例外が起きた瞬間にcatchへ処理が移り、どの例外をどのcatchで受け止めるかが結果を左右します。例外の種類に応じてメッセージを出し分けることで、ユーザーにも状況が伝わりやすくなります。またfinallyブロックは、後片付けが必要なプログラムにおいて特に重要で、ファイルのクローズや接続の解放といった処理を確実に実行するために役立ちます。 例外処理を正しく理解しておくと、エラーへの耐性が高い読みやすいコードが書けるようになるだけでなく、将来的に複雑なシステムを扱う際の基礎力にもつながります。Javaの例外処理は、最初は難しく感じる部分もありますが、try-catchの流れをつかみ、例外の種類ごとに整理していくことで、自然と理解が深まり、安心してプログラムを構築できるようになります。

先生と生徒の振り返り会話

生徒

「きょう学んだtry-catch文のおかげで、どこでエラーが起きているのか見つけやすくなりました。例外ごとにcatchを分ける意味もよくわかりました。」

先生

「その調子です。例外処理はとても大切で、コードの安全性を高めてくれます。finallyがどんなときでも実行される点も覚えておくと便利ですよ。」

生徒

「はい!tryの中には必要な処理だけ書くとか、具体的な例外クラスでcatchするといったコツも気をつけたいと思いました。」

先生

「それができるようになると、読みやすくて安全なコードが自然に書けるようになります。実際の開発ではログを残すことも多いので、その点にもゆくゆく意識を向けてみてください。」

生徒

「わかりました!次はthrowsの使い方ももっと理解できるように練習します!」

先生

「良い心がけですね。例外処理を理解しておけば、どんなエラーにも落ち着いて対応できるようになりますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Javaのtry-catch文とは、具体的にどのような役割を持つ構文なのですか?初心者にもわかりやすく教えてください。

Javaのtry-catch文は、プログラムの実行中に発生する「予期せぬトラブル」、いわゆる「例外(Exception)」をあらかじめ予測して、安全に処理するための非常に重要な構文です。プログラミング初心者が書いたコードが、文法的には正しくても、実際に動かした瞬間に数値の変換ミスやファイルの欠如などが原因でエラーが発生し、プログラムが強制終了してしまうことがあります。この強制終了を防ぎ、エラーが発生した際にも特定のメッセージを表示させたり、別の安全な処理へ誘導したりすることで、アプリやシステムが急に落ちるのを防ぐ「防波堤」のような役割を果たします。
Javaの例外処理の一覧へ
新着記事
Java
Javaの演算子の優先順位
Javaの演算子の優先順位を完全解説!初心者向けの丁寧な解説
Java
Javaのローカル変数と順次処理
Javaのローカル変数と順次処理を徹底解説!初心者でも理解できるコードの基本
Python
NumPyのdtype一覧!int・float・bool・str・objectの違いを比較
NumPyのdtype一覧を完全解説!int・float・bool・str・objectの違いを初心者向けに比較
Dart
Dartのコンストラクタまとめ!デフォルト・名前付きコンストラクタの使い方
Dartのコンストラクタまとめ完全ガイド!デフォルトコンストラクタと名前付きコンストラクタの使い方を初心者向けに解説
人気記事
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広告リンク