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

型情報の取得・活用について

Javaで抽象度の高い実装を行うときに必要となる型情報の活用法について。 できるとできないとでプログラムの応用範囲が変わってくるのでメモっときます。 こちらのエントリーと合わせて読むといいと思います。 …

no image

依存関係エラー

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

no image

リファクタリング

業務で大幅なリファクタリングをする機会があり、その際の注意だったり、気をつけるべきことなどをまとめておきます。 自分用なので自分にしかわからない言葉で書いてある可能性が大きいです。 気になる方は問い合 …

no image

Javaのarraycopy

最近あまりJava自体には触っていないですが、資格の勉強をコツコツとすすめていることもあり、新たな発見もあります。 8ヶ月ぐらいJava書いていますが、arraycopyというメソッドをはじめてしりま …

no image

Javaビルドツール

JavaではPHPやRubyなどといったインタプリタ言語とは違い、ソースはクラスファイルといわれるファイルに変換する必要があります。この作業をコンパイルと呼びます。最低限この作業をやらないとプログラム …

アーカイブ