WisdomSoft - for your serial experiences.

8.1 例外の発生

プログラムは常に予期しない状態に陥る可能性があります。整合性の破たん、不正な入力値、ハードウェアの気まぐれ、通信障害など、プログラムの実行に支障をきたす事態が発生すると、Java 仮想マシンは例外を送出します。

8.1.1 有事の備え

多くの初心者は、プログラミング言語の構文レベルの知識が不足しているためコンパイル作業に頭を悩ませます。コンパイルしても、コンパイラが何らかのエラーを通知し、その原因を正しく理解できない状態です。しかし、ある程度プログラミング言語になれてくると、自然にこのようなミスは減少します。そして、コンパイル・エラーによってミスを認識できることはむしろ幸福であることを知ることになるでしょう。プログラムのバグでもっとも厄介なのは、実行時のエラーなのです。

実行時のエラーやバグというのは、例えば配列のサイズ以上の存在しない構成要素を参照しまうとか、インスタンス生成時にメモリが不足するなど、コンパイル時点では予期することのできないプログラム、またはコンピュータや仮想マシンのエラーです。このような実行時のエラーの多くは復帰不能な致命的なものです。

Java では、こうした異常事態に備えるために、統一したエラー処理方法を提供しています。それが例外です。プログラムが不法な処理を実行した場合や仮想マシンにエラーが発生した場合、プログラムはその時点で例外を発生させます。これを例外をスローすると表現します。例外はクラスで表現されるため、発生したエラーの種類によって生成される例外のインスタンスが選択されます。

例外の発生理由の 1 つは、整数を 0 で除算したり、コンパイル時には存在していたはずの型(クラスファイル)が実行時に存在しない場合など、実行時に異常な条件が検出された場合に発生します。

コード1
class Test {
	public static void main(String args[]) {
		int iValue = 10 / 0;
	}
}
実行結果
java Test
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at Test.main(Test.java:3)

コード1では、開始早々 0 の除算を実行するため、仮想マシンは異常な処理を検出します。その結果 java.lang.ArithmeticException という例外が発生したことが実行結果から知ることができます。java.lang.ArithmeticException とは、立派なクラスです。例外が発生すると、このようにその種類に応じて適切な例外クラスがインスタンス化され、それが例外としてスローされるのです。つまり、例外はクラスとして構造的な情報を提供することができるのです。この例外クラスを通すことによって、開発者は何が原因で例外が発生したのかを知ることができるでしょう。