skillup

技術ブログ

Java

例外処理について その2

投稿日:2015年9月23日 更新日:

以前、「例外処理について」で例外処理について記述をしたんですが、漠然としていたのともう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など。原則として、ストリームを閉じるなど例外の要件にかかわらず行う処理を記述します。

参考リンク

IllegalArgumentExceptionとIllegalStateExceptionの違い

ClassNotFoundExceptionの原因と対策

Throwableについて本気出して考えてみた

-Java
-,

執筆者:


comment

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

関連記事

no image

Mapからインスタンス変数、インスタンス変数からMapへ

Javaで変数を引き回すときにMapからインスタンス、インスタンスからMap、あるインスタンスから別のインスタンスに変数を差し替える作業って結構多いと思います。 これって普通にやるとMapのget,p …

no image

JavaEEでのURLマッピング

Contents1 URLマッピング1.1 prettyfaces1.2 導入方法1.2.1 pom.xmlの設定1.2.2 pretty-config.xmlの設定1.3 ManagedBeanでの …

no image

型パラメータに関して その2

Javaでオブジェクト指向に基づいたコーディングをするために必須であり、最初の難関だったのが型パラメータでした。 Contents1 型パラメータが必要なケース2 型パラメータの制限3 クラスインスタ …

no image

小ネタ集

最近覚えた小ネタをのせていきます。 熟練のプログラマからすると当たり前のことが多いと思いますが・・・ Contents1 {}でスコープ限定2 リダイレクト:face-redirect=true3 H …

no image

JSFのifタグ

JSFは基本的にテンプレートなので、 HTML+CSS+JavaScript ロジック側からの変数の出力 ループ処理 以上のことをさせることはあまりありません。 が、まれに条件分岐なんかをさせたいとき …

アーカイブ