【Java】try-catchは『保険』である。例外処理の基本と思考法を学ぶ 公開日: 2026年03月01日 Javaでファイルの読み書きやネットワーク通信のコードを書き始めると、IDE(統合開発環境)が「try-catchで囲みなさい」と強制してくる場面に出くわします。 言われるがままにコードを囲み、catchブロックの中はとりあえず空っぽにしておく…そんな経験はありませんか? 多くの初心者にとって、この例外処理(Exception Handling)は、ただ面倒なだけの「お作法」に見えるかもしれません。 しかし、try-catchは、あなたのプログラムを予期せぬクラッシュから守り、ユーザーに迷惑をかけないための、プロフェッショナルなコードに必須の『保険』なのです。 今日は、この「例外」という概念の本質と、try-catchを使った正しい「保険のかけ方」を、具体的なコードと共に学んでいきましょう。 🤔 例外(Exception)とは何か? 例外とは、プログラムの実行中に発生した「予期せぬ、異常な事態」のことです。 例えば、 読み込もうとしたファイルが存在しなかった (FileNotFoundException) 接続しようとしたサーバーが応答しなかった (ConnectException) ユーザーが無効な数値(例: "abc")を入力した (NumberFormatException) これらは、コンパイル時にはチェックできない、プログラムを実行してみなければ分からない問題です。 もし、これらの「万が一」に備えていなければ、プログラムは異常事態が発生した瞬間に為す術なく停止(クラッシュ)してしまいます。 🏥 try-catchブロック:例外の応急処置室 try-catchブロックは、この「万が一」に備えるための構文です。 「ファイルの読み込み」という、失敗する可能性のある処理を例に見てみましょう。 保険なしのコード(危険!) 存在しないファイルを読み込もうとすると、FileNotFoundExceptionが発生し、プログラムはその場でクラッシュします。 import java.io.FileReader; public class NoTryCatchExample { public static void main(String[] args) { // このコードはコンパイルエラーになる // FileReader reader = new FileReader("存在しないファイル.txt"); } } Javaコンパイラは非常に賢いので、FileReaderのような失敗する可能性のある処理を裸で書こうとすると、「例外処理がされていません」とコンパイルエラーを出して、危険なコードが生まれるのを未然に防いでくれます。 保険ありのコード(安全!) try-catchで処理を囲むことで、コンパイラを納得させ、かつ安全にプログラムを動かすことができます。 import java.io.FileReader; import java.io.FileNotFoundException; public class TryCatchExample { public static void main(String[] args) { try { // 【試行ブロック】 // 例外が発生する可能性のある処理をここに書く System.out.println("ファイルを開きます..."); FileReader reader = new FileReader("存在しないファイル.txt"); System.out.println("ファイルを開きました。"); // この行は実行されない } catch (FileNotFoundException e) { // 【捕獲ブロック】 // tryの中で FileNotFoundException が発生した場合、 // プログラムはクラッシュせず、代わりにここの処理が実行される System.out.println("エラー発生!ファイルが見つかりませんでした。"); // e.printStackTrace(); // エラーの詳細を出力することもできる } System.out.println("プログラムは正常に処理を続けました。"); } } finallyブロック:何があっても実行される「後片付け」 try-catchには、finallyという3つ目のブロックを追加できます。ここに書かれた処理は、例外が発生しようがしまいが、必ず最後に実行されます。 ファイルやデータベース接続など、使い終わった後に必ず閉じる必要があるリソースのクローズ処理などを書くのが一般的です。 🤷♂️ 問題点:他人のコードの「保険」の意味が分からない FileNotFoundExceptionのような分かりやすい例外は良いですが、あなたがライブラリやフレームワークを使い始めると、見たこともないような複雑な例外処理に出くわすことがあります。 // どこかのライブラリで見かけた、謎の例外処理... try { complexObject.process(); } catch (IllegalStateException | UnsupportedOperationException e) { // なぜこの2つの例外をここでキャッチしているんだろう? // このライブラリの作者は、どんな「万が一」を想定しているのか? logger.error("処理中に予期せぬ状態になりました。", e); throw new MyServiceException("処理を続行できません。", e); } このようなコードに遭遇した時、「この`try-catch`が、どんな『事故』に備えるための『保険』なのか」を理解するのは、初心者にとって非常に困難です。 ドキュメントを読んでも、その例外が具体的にどんな状況で発生するのか、イメージが湧かないことも多いでしょう。 AIに、コードの「リスクシナリオ」を解説させる そんな時こそ、AIコード解説ツール「SerchCode Pro」の出番です。 意味の分からないtry-catchブロックをまるごとツールに貼り付けてみてください。 AIは、そのコードがどのような役割を持っているかを解説するだけでなく、IllegalStateException`や`UnsupportedOperationExceptionが「具体的に、どのような状況で発生する可能性があるのか」という、いわば「リスクシナリオ」を解説してくれます。 「このprocessメソッドは、初期化が完了する前に呼び出されるとIllegalStateExceptionを投げるように設計されていますね」 といった解説をAIがしてくれることで、あなたはそのコードの表面的な動きだけでなく、作者が込めた「安全設計」の思想までをも読み解くことができるのです。 まとめ:例外処理を制する者が、堅牢なコードを制する 例外処理は、面倒なだけのルールではありません。それは、あなたのプログラムを現実世界の予測不可能な問題から守り、ユーザーに安定したサービスを届け続けるための、プロフェッショナルとしての責任です。 tryで、失敗する可能性のある処理を囲む。 catchで、特定の失敗パターンに対する「代替案」を用意する。 finallyで、何があっても必ず行うべき「後片付け」を実行する。 複雑な例外処理は、AIにその「意図」を解説させ、知識として吸収する。 try-catchを正しく理解し、使いこなすことは、単に「動く」だけのコードから、何があっても簡単には倒れない「堅牢な」コードへと、あなたのスキルを昇華させてくれるでしょう。 プログラミング学習に必須ツール! 記事で紹介したコードがよく分からなかったり、ご自身のコードについてもっと知りたい場合は、AIコード解説ツールが便利です。コードを貼り付けるだけで、AIが日本語で分かりやすく解説します。 AIコード解説ツールを使ってみる →