第十九章 Exception(例外)
エラー・例外・強制終了
Javaでの、エラー・例外・強制終了の
言葉の使い分について紹介します。
目次
1.広い意味でのエラーの分類
コンパイル型のプログラムでは、エラーを以下のように分類しています。
- コンパイルエラー
コンパイルが正常に行えず、中断してしまった状態です。
文法的に間違っている場合などに発生します。
- 実行時エラー
プログラムの実行が正常に行えず、中断してしまった状態です。
- 論理エラー
プログラムの実行が正常に行われたが、
結果が期待したものにならない状態です。
意図したプログラムになっていない事を指します。
Exception(例外)は、実行時エラーに関連する言葉です。
2.例外とは
Exception(例外)とは
予期しない出来事で正しく処理が行えないことを言います。
例外が発生した結果プログラムが強制終了するとは限りません。
例外ってやっぱり
エラーのことなんでしょ?
難しいなぁ。
「例外」と「エラー」という言葉は、
プログラミングの世界で
共通する定義がないみたいだ。
えっ?
割と大事な言葉よね?!
Javaではこんな感じに定義している。
実際に Errorクラスや
Exceptionクラスが存在する。
エラーの種類
- エラー(Error)
プログラムの実行中に異常が発生して、
Errorクラス、又はそのサブクラスのインスタンス が呼び出し元に
スローされた状態です。
通常のアプリケーションであればキャッチすべきではない
重大な問題を示します。
- 例外(Exception)
プログラムの実行中に異常が発生して、
Exceptionクラス(又はそのサブクラス)のインスタンス が
呼び出し元にスローされた状態です。
通常のアプリケーションでキャッチされる可能性のある状態を示します。
以下の2種類に分類されます。
- 非チェック例外(UncheckedException)
RuntimeException とそのサブクラスは非チェック例外です。
例外処理が無くてもコンパイルが通ります。
- チェック例外(CheckedException)
コンパイラによってチェックされる例外のことです。
例外処理が必須になります。
クラスの継承関係
java.lang.Throwable
│── Error
└── Exception
│── RuntimeException
│ │
│ └─── 非チェック例外の仲間
│
└── チェック例外の仲間
3.例外に関連する言葉
スロー(throw)
例外が発生することを、
「例外がスロー(throw)された」とか、「例外をスローする」と言います。
throw は本章で取り扱います。
例外処理とは
例外の発生に備えた処理のことを例外処理といいます。
つまり例外が発生しても
プログラムが正常に動作するように
処理する場合もある。
強制終了
エラーや例外によってプログラムが中断することをいいます。
4.まとめ
プログラムが異常終了することを、世間一般に「エラー」と言ったりしますよね。
日本語的にはおそらく間違いではないと思いますが、
Javaでは、プログラムの実行中に発生する異常を以下のように分けて考えましょう。
- エラー
プログラムでは対処できない重大な異常が発生した状態
- 例外
異常の発生を呼び出し元のメソッドに通知している状態
- 強制終了
異常の発生によってプログラムの動作が中断した状態
「例外が発生しても強制終了
するとは限らない」かぁ。
Javaルールで行くと「エラー」という言葉は
ほとんど使う機会のない言葉になるな。
強制終了したら
エラーって言っちゃうわよ?
コンパイルエラーや、実行時エラーを
「エラー」というのは間違ってないと思うよ。
難しいなぁ。
なるべくごっちゃにならないように
がんばる。
お疲れ様でした。