skillup

技術ブログ

Java

例外処理について その2

投稿日:

以前、「例外処理について」で例外処理について記述をしたんですが、漠然としていたのともう1回まとめなおしたかったため、メモしておきます。

例外とは?

プログラム実行時に発生するエラーのことであり、例外が起こるとプログラムはここでストップ(強制終了)します。

これを適切に行うことを例外処理といいます。

例外のクラス分け

Javaの例外のクラス分けは下記のようになっています。

  • Throwable
    • Error
    • Exception
      • RuntimeException
      • RuntimeException以外

以下、説明していきますね。

Throwable

Javaの全ての例外のスーパークラスです。

後に書きますけどこのクラスを継承したりすることはないですね。私は資格試験で勉強するまでは存在をしりませんでした(汗)

Error

unchecked例外といわれ、例外処理自体は任意になります。

エラーの内容はメモリ不足などプログラマが直接対応するのが困難なエラーが該当します。

一例として下記のようなものがあります。

StackOverFlowError

下記のように呼び出し元と定義が一緒で永久ループなどが発生するケースです。

NoClassDefFoundError

対象のクラスがないときなどに置きます。

コンパイル時にはあるのに、実行時にライブラリがデプロイされていないときなど。

Exception

一般的なプログラマにとっては例外処理というとこちらのほうが一般的でしょう。

この中でも例外チェックが任意となるRuntimeExceptionとそれ以外に分けられます。

RuntimeException

例外処理が任意のものになります。

下記のものが有名です。

ArrayIndexOutOfException

下記のような存在しないインデックスで配列にアクセスをしたときに発生します。

ClassCastException

間違った型変換を行ったときに発生します。

IllegalArgumentException

間違った引数をとったときなどに意図的に投げたりします。

IllegalStateException

オブジェクトのプロパティのチェックなどに使います。参考リンク参照。

NumberFormatException

整数を表さない文字列を整数に変換しようとしたとき。

RuntimeException以外

例外処理が必須となるExceptionです。

下記のものが有名です。

FileNotFoundException

ファイル読み込みなどで該当ファイルがないときにスローされる例外処理です。

 ClassNotFoundException

該当するクラスが存在しているかのチェックです。

ケースとしては間違ったパッケージを読み込んでクラスが存在しない時など。

jarファイルをしっかり読み込んでいるかの確認をしましょう。

実務上の注意点

Throwable,Error,Exceptionクラスを継承しない

Errorクラスはアプリケーションでキャッチされるべきでない重大なエラーであり、プログラマが関与すべきエラーではないため。

またThrowable、Exceptionに関してはこれらを継承するとエラーの意味があいまいになるため。

catch句では必ず例外処理をする

ここで例外を握りつぶすと例外が発生したときなどにどこで例外が起きているかわからなくなります。

Finallyで例外をキャッチしない

ここで例外をキャッチするとcatch句を上書きしてしまうため。

NullPointerExceptionは使わない

if( var != null)やOptionalなど通常の条件分岐などで対処できるため。

Finallyブロックに戻り値に影響のある操作はしない

例としてreturnなど。原則として、ストリームを閉じるなど例外の要件にかかわらず行う処理を記述します。

参考リンク

http://kechanzahorumon.hatenadiary.com/entry/2012/09/21/180147

http://blog.rutake.com/techmemo/2011/10/13/classnotfoundexception%E3%81%AE%E5%8E%9F%E5%9B%A0%E3%81%A8%E5%AF%BE%E7%AD%96/

http://d.hatena.ne.jp/daisuke-m/20081202/1228221927

-Java
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

CSVの入出力に関して

業務でCSVの入出力と格闘中。 まあよくある頻出の作業だったりするんですが、自前でやるとなかなか面倒です。 面倒なポイントとしては クオートのエスケープ カンマのエスケープ ヘッダーとの結合 ですかね …

no image

JSFを使ったAjax

現在開発中のサブプロジェクトでJSFからAjaxを使う機会があったので紹介します。 仕様自体は非常にシンプルで下記の画面でプルダウンが変更になったときにDBを見に行って画面の値を更新するような仕様です …

no image

JSFのメッセージのレンダリング

ManagedBeanとJSFでメッセージのやり取りをする場合、直接メッセージを変数として持たせるよりは、JSFの仕組みを通じてメッセージを出力させたほうが適切です。 Contents1 エラーメッセ …

no image

JSF リダイレクト後のメッセージ&disabled=true

少々細かいですがJSFネタです。 Contents1 リダイレクト後のメッセージ2 h:commandbutton disabled=trueについて リダイレクト後のメッセージ JSFからManag …

no image

文字列変換系処理まとめ

Javaで文字列の変換(全角、半角など)の処理のまとめです。 ブログに記事として書こうと思ったのですが、丸々コピペになってしまうので、それじゃあ元リンクを紹介したほうがいいかなと思い、今日は基本的にリ …