Javaの例外(エラー)
Javaを書く上で重要な例外処理
その例外処理を適切に行うためには、そもそもJavaにはどんな例外が存在するのか
何を処理すればいいのか
ということを抑えるのが大切だと思うので、Javaの例外について改めて調べてまとめてみた
本記事はコードは一切記述せず、Javaの例外についての基本的なことについてのみ記述する
エラーの種類
エラーには3つの種類が存在する。
このうち例外処理を行う必要があるものは、実行時エラーのみである。
文法エラー(Syntax error)
- コンパイルでこけるエラー 例)スペルミスなど
実行時エラー(runtime error)
- 文法としては間違っていなく、コンパイルも通る
- コンパイルは通るが実行中に異常事態が発生し、プログラムの実行が強制終了する。
=>この時のエラーを実行時エラーという(実行している途中で発生しているエラーなので) 例)nullを処理しようとした、配列の存在しないインデックスにアクセスしたなど
論理エラー(logic error)
- コンパイルも実行もできるが、期待していた値と別の値が返ってくるなどのエラー
- 作成したコードのロジックが間違っていたということ
そもそも例外とは?
- 実行時エラーは、「プログラム実行中に発生した想定外の事象」によって引き起こされる
=>この想定外の事象が「例外」である
じゃあ例外処理って?
- 「プログラム実行中に発生した想定外の事象」である例外を処理(ハンドリング)することが例外処理(エラーハンドリング)である
チェックするべき例外としなくてよい例外
- チェックするべき例外を「チェック例外」、チェックしなくてもよい例外を「非チェック例外」と呼ぶ
- 例外処理(エラーハンドリング)を記述すべき例外は、このチェック例外である
例外の種類
例外は大きく分けて以下の3つなる
1. Error系 : 回復する見込みがない例外
2. Exception系: 回復可能な対策を打つべき例外
3. RutimeException系 : 絶対に対策を打つべきというわけではない例外
このうち、処理すべき例外(チェック例外)は、Exception系例外のみである
チェック例外(検査例外)
- 実行時エラーの中で、回復の見込みがある例外で、その例外が発生することを考慮して対処方法を備えておく必要がある例外
- つまり、プログラマは実行時エラー && Exception系例外のものだけ例外処理(エラーハンドリング)するべき
- このチェック例外(検査例外)はあらかじめ、コード中で例外処理(よくcatchすると言われている行為)をしないとコンパイルエラーになる
非チェック例外(非検査例外)
- 上記のチェック例外以外の例外
- プログラマが特に処理する必要はない例外
参考にさせていただいたサイト
http://qiita.com/yuya_presto/items/3b651d6b0cf38f77e933 http://qiita.com/kata/items/bd129ba6113a61126389 http://qiita.com/yuba/items/d41290eca726559cd743
参考文献
中山 清喬、 国本 大悟 (2011/10/7)『スッキリわかるJava入門』 インプレスジャパン
※ Qiitaでも同一記事を投稿している qiita.com