Knowledge Log

【Java】もうエラーは怖くない!「例外処理(try-catch)」でトラブルに強いプログラムを作ろう

denson
1

はじめに

みなさんどうも、おげんです。

プログラミングをしていて、一番心が折れそうになる瞬間っていつでしょうか?

一生懸命書いたコードを実行した瞬間、コンソールに真っ赤な文字で長文のエラーメッセージが出て、プログラムが「ガシャン!」と強制終了してしまったとき…ではないでしょうか。

「あんなに頑張って書いたのに、たった一つのミスで全部止まっちゃうの?」

そう、これまでの私たちのコードは、いわば「すべてが予定通りに進む」ことを前提にした、少し壊れやすい状態でした。

でも、現実の世界では予期せぬトラブルがつきものです。

  • 入力されるはずの数字に、間違えて「文字」が入ってきた
  • ネットが急に切れて、データが取れなくなった
  • 0で割り算をしてしまった(数学的にNG!)

こうした「想定外の事故」が起きても、パニックにならずに「おっと、トラブルですね。ではこう対処しましょう」とスマートに振る舞えるようにするのが、今回学ぶ「例外処理(try-catch)」です。

エラーを「敵」ではなく「想定内の出来事」に変える技術、一緒に身につけていきましょう!

この記事はこんな人におすすめ!
  • 赤いエラー文字を見るだけで、心臓がバクバクしてしまう人
  • プログラムが途中で止まってしまうのを、なんとか防ぎたい人
  • ユーザーに優しい、壊れにくいアプリを作りたい人
2

「例外」とは何か?

プログラミングの世界で起きるトラブルには、大きく分けて2つの種類があります。

1. コンパイルエラー(書き間違い)

これは、文法が間違っているときに起きるものです。

  • セミコロン ; を忘れた
  • 変数名のスペルが違う
  • 型が合っていない これは、実行する前にエディタ(VSCodeやEclipseなど)が「ここ間違ってるよ!」と教えてくれるので、直すのは比較的簡単です。

2. 例外(実行中に起きる事故)

今回の主役がこれです。

「文法は合っているけれど、動かしてみたら予期せぬことが起きた」という状態です。

これを料理のレシピに例えると分かりやすいですよ。

  • コンパイルエラー: レシピに「卵をうまる(割る)」と誤字がある状態。作る前に「え、何これ?」と気づけます。
  • 例外(実行時): レシピ通りに「卵を割る」と書いてある。でも、いざ作ろうとしたら「冷蔵庫に卵がなかった(在庫なし)」とか「割ったら腐っていた(不良品)」という状態。

放置するとどうなる?

もしこの「例外」をそのままにしておくと、プログラムは「もう無理!パニック!」となって、その瞬間に強制終了してしまいます。

現実のアプリで、ボタンを押した瞬間に画面が真っ暗になってアプリが落ちたら、ユーザーの人たちは困ってしまいますよね。

だからこそ、「もし卵がなかったら、コンビニに買いに行く」とか「隣の人に借りる」といった『代わりの手順』をあらかじめ書いておく必要があるんです。

それが「例外処理」の役割です。

3

try-catchの基本形

「もし事故が起きたらどうしよう…」と不安な場所に、あらかじめ保険をかけておく書き方です。3つのキーワードで構成されています。

try {
    // 1. とりあえずやってみる(事故が起きそうな処理)
    // 例:卵を割る
} catch (Exception e) {
    // 2. もしダメだったら、こう対処する(事故が起きた時の処理)
    // 例:予備の卵を出す、または「卵がないよ!」と報告する
} finally {
    // 3. 成功しても失敗しても、最後に必ずやる(後片付け)
    // 例:キッチンの電気を消す
}

それぞれの役割を詳しく!

  • tryブロック: 「ここ、もしかしたらエラーが出るかも?」というコードをこの中に閉じ込めます。エラーが起きなければ、そのまま次の処理へ進みます。
  • catchブロック: もし try の中でエラー(例外)が発生したら、プログラムを止めずにここへジャンプします。ここで「エラーメッセージを出す」「別の方法を試す」といったリカバリーを行います。
  • finallyブロック: これは「あってもなくてもOK」ですが、何があっても絶対に実行される場所です。例えば「ファイルを開きっぱなしにしない」とか「データベースとの接続を切る」といった、後始末によく使われます。

「e」って何者?

catch (Exception e)e は、「何が原因でエラーになったのか」という情報が詰まった手紙のようなものです。

e.getMessage() と書けば、「0で割り算しましたよ」といった具体的な理由を教えてくれます。

4

具体例:RPGのダメージ計算

例えば、モンスターへのダメージを計算するプログラムを考えてみましょう。

もし、何かのバグで「守備力が0」になっていたり、入力ミスで「数字じゃないもの」が送られてきたらどうなるでしょうか?

例外処理がない危ないコード

int damage = 100 / defense; // もし defense が 0 だったら…
System.out.println(damage + "のダメージ!");
// ここでプログラムが強制終了!「勝利演出」までたどり着けない…

try-catch で守られたコード

これを try-catch で囲むと、たとえ計算に失敗してもゲームを続行できます。

try {
    // 事故が起きそうな計算
    int damage = 100 / defense; 
    System.out.println(damage + "のダメージ!");

} catch (ArithmeticException e) {
    // 0で割り算(算術エラー)が起きた時の対処
    System.out.println("【警告】守備力が不正です!ミス扱いになります。");
    System.out.println("原因: " + e.getMessage());

} finally {
    // 成功しても失敗しても、ターンは終了させる
    System.out.println("ターンを終了します。");
}
  • ゲームが落ちない: 0で割るというミスが起きても、エラーメッセージを出して次の処理(敵のターンなど)へ安全に進めます。
  • 原因がわかる: e.getMessage() を見ることで、「なぜ今ミスになったのか」を開発者が後から調査しやすくなります。

実際の開発では、「ネットワークが繋がらない」「ファイルが壊れている」といった、自分のコードは正しくても防げない外的な事故がよく起きます。

そんな時に try-catch という「保険」があなたとユーザーを救ってくれるんです。

5

まとめ:エラーは「敵」じゃない

今回は、プログラムの強制終了を防ぐ最強の盾、「例外処理(try-catch)」について学びました。

大事なポイントを振り返ってみましょう。

  • 例外(Exception)は事故: 文法ミスではなく、動かした後に起きる「卵がない!」という不測の事態。
  • try-catchは保険: 事故が起きそうな場所に「もしダメならこうする」という予備プランを立てておくこと。
  • finallyは後片付け: 成功しても失敗しても、最後に必ずやるべきことを書く場所。

エラーはプログラムからの「SOS」

初心者の頃は、真っ赤なエラー画面を見ると「自分は才能がないのかな…」なんて落ち込んでしまうこともあるかもしれません。

でも、実は逆なんです。 エラーはプログラムが「このままだと壊れちゃうから、なんとかして!」と必死にあなたに送っているメッセージ。

いわば、より良いシステムにするためのヒントなんです。

今回学んだ try-catch を使いこなせれば、エラーを怖がる必要はありません。

むしろ「想定内のトラブル」として冷静に受け流し、ユーザーを不安にさせない優しいアプリを作れるようになります。

完璧なコードを書くことよりも、「何が起きても止まらない、粘り強いコード」を書けるエンジニアを目指していきましょう!

今回も最後まで読んでいただき、ありがとうございました!

ABOUT ME
おげん
おげん
駆け出しエンジニア
文系未経験からエンジニアになるために挑戦を開始したアラサー。転職活動を終え、2026年4月からIT企業で勤務予定。自分が学習で苦労した経験を『誰かのための道しるべ』として発信中。
記事URLをコピーしました