ほぷしぃ

Java言語入門 〜C言語を学んだ君へ〜

[第13回]例外処理

[1]Javaの異常事態の対処

Javaは、異常事態を2つの種類に分けて扱います。
その異常事態とは「エラー」「例外」です。
何か似ている2つの言葉ですが、何が違うのか見ていきましょう。

エラーと例外の比較

異常事態の種類 比較
エラー プログラムで対処できない
例外 プログラムで対処できる

「エラー」と「例外」の違いはプログラムで対処できるかできないかです。
エラーの例としては、「メモリ不足」が挙げられます。
例外の例としては、「整数を0で割り算した」「配列の要素より大きい要素にアクセスした」が挙げられます。

例外処理のメリット

例外処理をすることで、以下のようなメリットがあります。

・ 呼び出し元の指定した場所に制御を1度にうつし、例外の情報を返す
・ 1箇所に例外に対する方法をまとめる

例外を使わない場合に、処理をする方法として、if文が思いつくと思います。
しかし、if文では必要な個所に何度も書く必要があり、とても大変です。
そこで、例外処理の出番となります。
例外処理を使うことで一元管理できるわけです。

例外を処理するとしない場合の違い

例外処理をしない場合とする場合の違いを以下に示しました。

・ 処理しない場合には、例外発生時にプログラムが終了する
・ 処理した場合には、プログラムを終了せず何かの処理を行う

例外を処理した場合には、すぐにプログラムを止めません。
とめた時にここでどのような異常事態が発生したのかを通知します。

[2] 異常事態が発生した場合

プログラムの実行中にエラーや例外が発生した場合にプログラムは何をするのでしょうか。
Javaプログラムでは、その異常事態に応じて、定義されている特別なクラスのインスタンスを生成します。
その代表的なクラスには以下のようなものがあります。
種類 クラス名 特徴
エラー Java.lang.Error 致命的な異常事態
例外 Java.lang.Exception 一般的な異常事態

もちろん、このクラスの中には様々なサブクラスが存在しています。
また、それらのサブクラスは、異常事態が発生した時に何の異常事態が起きたのか通知します。
ここでは、例外処理の学習をしていきます。
では、実際に例外クラスのサブクラスにはどのような種類があるのか見ていきましょう。

例外を扱うクラス

クラス名 機能
ClassNotFoundException クラスが見つからない
IllegalAccessException クラスに不正アクセスした
InstantiationException インタフェース、抽象クラスをインスタンス化
InterruptedException スレッドに割り込み
NoSuchFiledException フィールドが見つからない
NoSuchMethodException メソッドが見つからない
RuntimeException 実行時に例外が発生
IOException 入出力の例外が発生
FileNotFoundException ファイルが見つからない
NumberFormatException 不適切な文字列を数値に変換
ArrayIndexOutOfBoundsException 配列の範囲外を指定
ArithmeticException 計算により例外が発生
NullpointerException nullオブジェクトにアクセス

もちろん、すべてを覚える必要はありません。
必要な時に必要なクラスを調べて使えばよいです。
例外クラスは「Exception」とついているのでわかりやすいと思います。

例外の種類

例外にはさらに2種類があります。

・ 例外処理を記述しなくてもコンパイルできる例外
・ 例外処理を記述しないとコンパイルエラーになる例外

コンパイルできる例外は、RuntimeExceptionクラス、またはErrorクラスのサブクラスです。
コンパイルできない例外は、上記以外のクラスです。

例外処理の書き方には注意しましょう。

[3] 例外処理のキーワード

例外処理のキーワードはこのようなものがあります。

try
catch
finally
throw
throws

次のページから各キーワードを使い、実際にプログラムを作っていきましょう。



第12回へ ページのトップへ 次のページへ