例外処理、なんとなく使ってませんか?Java初心者のためのやさしいエラーハンドリング入門
Javaの try-catch
、なんとなく使ってきたけど
「これで本当に合ってるのかな?」
「握りつぶしてない…よね?」
そんな不安が少しでもよぎったことのある方に向けて、
今回は「Javaの例外処理」について、基礎から実務視点までやさしくまとめてみました。
☕ はじめに|例外処理を軽く見ていたあの頃の自分へ
プログラミングを始めたころ、例外処理といえば「とりあえず try-catch しておけば大丈夫」くらいの感覚でした。
でも実務でコードを読むようになると、それがとても危うい考えだったことに気づかされました。
- catch ブロックで握りつぶされていたログ
- スタックトレースの残っていないエラー
- ユーザーに伝わらないメッセージ
コードの挙動と向き合えば向き合うほど、例外処理は設計そのものに関わると実感しました。
✅ 本記事でわかること
- Javaにおける例外の種類と役割
- try-catch の基本構文と書き方
- throws による例外の伝播と設計の考え方
- カスタム例外を使うべき場面と作り方
- 実務でありがちなミスとベストプラクティス
- 実例コードで学ぶ「読まれる例外処理」
🔍 そもそも「例外」ってなんだろう?
プログラムには、想定どおりに動く「正常系」と、想定外のトラブルが起きる「異常系」があります。
Javaでは、異常系の処理を 例外処理(Exception Handling) として設計します。
✔️ 例外の種類(ざっくり2つ)
種類 | 説明 | 例 |
---|---|---|
Checked Exception | コンパイル時に処理を強制される |
IOException , SQLException
|
Unchecked Exception | 実行時に起こる/書かなくても動く |
NullPointerException , IllegalArgumentException
|
✍️ try-catch の基本
try {
// リスクのある処理
} catch (IOException e) {
System.out.println("ファイルが見つかりませんでした");
} finally {
System.out.println("処理が完了しました");
}
-
try … 問題が起こりそうな処理を囲う
-
catch … 起きた例外に応じた対処をする
-
finally … 成否に関わらず最後に実行(主にリソース解放など)
🔀 throws で例外を呼び出し元に渡す
例外をその場で処理せず、「私は処理しないので、呼び出した側で対応してね」という設計もできます。
public void readFile() throws IOException {
// throwされうる処理
}
-
try-catch → 今ここで処理する
-
throws → 呼び出し元に渡す(伝播させる)
責任の所在をどこに置くか、設計の意図が試される場面です…!
🧵 カスタム例外を作ってみる
標準の例外じゃ表現しきれない失敗、ありませんか?
public class UserNotFoundException extends Exception {
public UserNotFoundException(String message) {
super(message);
}
}
-
意味のあるクラス名で「なにが起きたか」が明確に
-
複数の層で同じ種類の失敗を拾いやすくなる
⚠️ よくあるミスとベストプラクティス
😢 悪い例
catch (Exception e) {
// なにも書かない、握りつぶす
}
これは“エラーを無視するコード”です…。
😊 良い例
catch (FileNotFoundException e) {
logger.warn("ファイルが見つからない: " + e.getMessage());
}
-
catchの型は絞る
-
メッセージは明確に
-
ログ出力や通知も忘れずに
🧑💻 実践:ファイル読み込み処理
try (FileReader reader = new FileReader("data.txt")) {
// 読み込み処理
} catch (FileNotFoundException e) {
System.out.println("ファイルが存在しません");
} catch (IOException e) {
System.out.println("読み取り中にエラーが発生しました");
}
-
try-with-resources で close() 不要に
-
複数の catch で処理を分けると読みやすい
-
具体的な文脈のエラーメッセージが伝わる!
✨ まとめ|例外処理は“育てる設計”
-
例外処理はコードの“最後の守り”
-
書いた人の気づかいや設計意図が見えるところ
-
読まれるコードは、catchの中に思いやりがある
「とりあえず囲む」から「ちゃんと考えて書ける」へ。
この例外処理を通して、“読んで安心されるコード”を目指していきませんか?
🐻 おわりに
例外処理って、静かにコードの底力を支えてくれる存在だなと思っています。 ログに残る一言、catchに込めた意図、やさしい失敗のしかた。
これからも自分なりの「設計のやさしさ」を育てていきたいです ☕
Discussion