JavaのThrowable・Error・Exceptionを図解で完全理解|例外処理の全体像がつかめる超入門

Java

はじめに:例外の「全体構造」を知らずに使っていませんか?

Javaでエラーや例外が起きたとき、「Exception」や「RuntimeException」などの用語はよく目にします。
でも、それらがどういう関係にあって、どんな役割を持っているのか、正しく理解できていますか?

このブログでは、初心者の方にもわかりやすく、

  • Throwableの意味とは?
  • ExceptionとErrorの違いは?
  • RuntimeExceptionはどこに入る?
  • それぞれ実務でどう使い分けるの?

を、図とコードを使って丁寧に解説します!


1. Javaの例外階層を図で見てみよう!

まずは、Javaの例外・エラーの全体像を図で整理します。

この構造が、Javaにおける「すべての例外/エラー処理の基本」となります。


2. Throwableとは何か?

Throwableは、例外やエラーとして「投げられる(throw)」ものの最上位クラスです。

Javaでは、throw new ~で例外を投げるとき、そのインスタンスは必ずThrowableを継承している必要があります。

主なメソッド:

Throwable自体を直接使うことはあまりありませんが、全体構造を理解する上での「根っこ」となる存在です。


3. Exceptionとは何か?(チェック例外)

Exceptionは、Throwableを継承したクラスで、プログラム中で起こりうる想定内のエラーを表します。

✔ 特徴:

  • 多くの場合、呼び出し元で対処が可能
  • 発生する可能性をコンパイル時にチェックされる
  • throws宣言が必要(チェック例外)

✔ 例:

このように、外部ファイルを読み込む処理は「失敗するかも」が想定されるので、IOExceptionというチェック例外を使います。


4. RuntimeExceptionとは何か?(非チェック例外)

RuntimeExceptionは、Exceptionの中でも特別な位置づけです。

✔ 特徴:

  • 実行時に発生(コンパイルではチェックされない)
  • 呼び出し元に明示的な対応は不要(throwsを書かなくてもOK)
  • バグ・設計ミスの原因であることが多い

✔ よく使われる非チェック例外:

  • NullPointerException
  • IllegalArgumentException
  • ArrayIndexOutOfBoundsException

✔ 例:

5. Errorとは何か?(回復不能なシステムエラー)

Errorは、Throwableを継承するもう一つの重要なクラスです。

✔ 特徴:

  • JVMやハードウェアレベルの重大なエラー
  • 基本的に回復不能
  • アプリケーション側で捕まえる必要なし(むしろ危険)

✔ 例:

  • OutOfMemoryError
  • StackOverflowError
  • InternalError

✔ 例外とエラーの違い:

分類対応可能性対応方法
Exception呼び出し元が対処可能try-catch / throws
Error呼び出し元が対処困難JVM再起動、アラートなど

6. 実務での使い分け|判断のポイント

✔ チェック例外(Exception)

  • 想定される外部要因(ファイル読み込み、DB接続、ネットワーク断など)
  • 呼び出し元が対処できる設計

✔ 非チェック例外(RuntimeException)

  • 引数の不正、null、範囲外など、コードの設計ミス
  • 呼び出し元ではなく、バグとして修正するべき

✔ Error

  • 基本的に try-catch で処理しない
  • 起きたらシステムログへ出力し、監視や再起動で対応

7. よくある誤解・アンチパターン

❌ 何でも RuntimeException にする

  • 呼び出し元での対処が難しくなり、例外の意味がぼやける

❌ Throwable をcatchする

Errorも捕まえてしまうため、JVMの異常も無視する恐れあり

❌ catch(Exception e) {} のように空キャッチ

ログも出さず、気づかないバグの温床


8. クラス構造まとめ|図解でもう一度おさらい!

このように、Javaの例外構造はきちんと分類されています。


9. 結論|Throwable・Exception・Errorの関係を理解してコードを設計しよう!

例外の全体構造を理解すると:

  • より安全でわかりやすいコードが書ける
  • 呼び出し元との責任分担が明確になる
  • 例外をログやモニタリングに活かせる

これからJavaを本格的に学びたい方は、まずはこの基礎をしっかり押さえてください。


スキルアップの第一歩は「正しい理解」から

コメント

タイトルとURLをコピーしました