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

JavaEEでリダイレクトを伴うデータ入出力(flashの活用)

JavaEEで何らかの処理を行い、リダイレクトさせる場合、リダイレクト前のデータを保存し、リダイレクト後のページにデータをもちこしたいときなどがあると思います。 オブジェクトの変数自体はスコープアノテ …

no image

Fileのアップロード

業務でCSVのアップロードを行っていますが、ファイルになりますと当然文字列ではなく、バイナリ形式のデータが必要になります。 アップロード自体の処理を書いていなかったので、その扱い方についてちょっと書い …

no image

JSFのテンプレート機能

Contents1 保守性の向上で必要なHTMLの考え方1.1 サンプル1.2 ファイル構成1.3 ソース1.3.1 静的なファイル群1.3.2 テンプレート1.3.3 アクセスファイル1.4 Net …

no image

依存関係エラー

JavaEEで新PCでビルドしたらいきなりエラー。同一のソースを別PCで動かすと正常に立ち上がります。 こんな場合、GlassFishの設定がおかしいか、ライブラリの依存関係に問題があることがほとんど …

no image

arquillianでのリソースファイル読み込み

以前、このエントリーでarquillianからライブラリが利用できず、追加のライブラリを導入した、ということを書きました。 実はリソースファイルもそのままですとarquillianからは使用できません …