目次
1. 例外の種類
例外とは、Throwableクラスのサブクラスのオブジェクトのことを指す。
Throwableクラスのサブクラスとして、Errorクラス、Exceptionクラスが存在している。
◆ Errorクラス
プログラムが実行できないなどの重大な例外を扱うため、例外処理は通常おこなわない。
例 IOError:重大な入出力エラー発生時にスロー
◆ Exceptionクラス
クラス名の末尾に必ずExceptionが付く。
RuntimeExceptionクラスに属するクラスと、
それ以外のExceptionクラスに属するクラスとに分類される。
RuntimeExceptionクラスに属するクラスは「非チェック例外クラス」と呼ばれ、
例外処理をおこなわなくてもコンパールエラーにならない。
例 NullPointerException :null値の参照型変数を参照しようとした場合にスロー
IndexOutOfBoundsException:配列やリストのサイズがが範囲外である場合にスロー
NumberFormatException :数字でない文字列やnullなど、
不適切な文字列を数値に変換した場合にスロー
それ以外のExceptionクラスに属するクラスは「チェック例外クラス」と呼ばれ、
例外処理をおこなわなければコンパイルエラーになるので、必ず例外処理をおこなう必要がある。
例 IOException :入力処理が何らかの原因で失敗した場合や、
割り込みが発生した場合にスロー
ClassNotFoundException:指定されたクラスが見つからない場合にスロー
FileNotFoundException :指定されたパス名のファイルが開けない場合、
またはファイルが見つからない場合にスロー
※ 参考用(図)
Throwableクラス
∟ Errorクラス
∟ IOErrorクラス
∟ Exceptionクラス
∟ RuntimeExceptionクラス(非チェック例外クラス)
∟ NullPointerException
∟ IndexOutOfBoundsException
∟ NumberFormatException
∟ RuntimeException以外のExceptionクラス(チェック例外クラス)
∟ IOException
∟ ClassNotFoundException
∟ FileNotFoundException
2. 例外の継承関係
たとえば何かしらの例外が発生したとき処理をおこないたい場合は、
catchブロックにExceptionクラスを記載するだけで、
下位クラスの例外をキャッチすることができる。
package jp.co.study.sample;
public class Qiita {
public static void main (String args[]) {
String str1 = "おさかな";
try {
Double.parseDouble(str1);
System.out.println(str1 + ":この文字列は数字です");
} catch (Exception e) {
System.out.println("何らかの例外が発生しました");
}
}
}
出力結果は「何らかの例外が発生しました」
例外の種類によって処理を分けたい場合は、
catchブロックに特定のExceptionクラスを記載する必要がある。
package jp.co.study.sample;
public class Qiita {
public static void main (String args[]) {
String str1 = "おさかな";
try {
Double.parseDouble(str1);
System.out.println(str1 + ":この文字列は数字です");
} catch (NumberFormatException e) {
System.out.println(str1 + ":この文字列は数字ではありません");
}
}
}
出力結果は「おさかな:この文字列は数字ではありません」
関連記事