Java -- 例外処理

Javaではコンパイル時に発生するコンパイルエラーと実行時に発生する実行時エラーがあります。例外処理とは実行時に発生するエラーに対して別途記述した処理を行わせることです。

try〜catch

例外処理の基本構文
try {
	例外の発生を調べる文;
	.....
}
catch {
	例外が起きた時に調べる文;
	.....
}
サンプル

以下のサンプルは配列要素を超える数を代入して例外を発生させています。

public static void main(String[] args) {
	try {
		int[] test = new int[5];
		test[10] = 80;
		System.out.println("test[10]に80を代入しました。");
	}
	catch(ArrayIndexOutOfBoundsException e) {
		System.out.println("配列の要素を超えています");
	}
	System.out.println("無事に終了されました");
}

結果

配列の要素を超えています
無事に終了されました

処理の流れとしては
1. tryブロック中で例外が起きると、そこで処理を中断。
2. 例外がcatchブロックの()の処理と一致していれば、catchブロック内の処理を行う。
3. catchブロックが終われば、そのtry〜catchブロックの後から処理が続く。

finallyブロック

finallyブロックは例外の有無にかかわらず、そのメソッド内で最後に必ず処理が行われるブロックです。なのでそのメソッド内で必ず行っておきたい重要な処理はfinallyブロックの中に記述しておかなければいけません

finallyブロックの基本構文
try {
	例外の発生を調べる文;
	.....
}
catch {
	例外が起きた時に調べる文;
	.....
}
finally {
	必ず最後に処理する文;
	.....
}
サンプル

以下のサンプルは上記のサンプルにfinally文を足しています。

public static void main(String[] args) {
	try {
		int[] test = new int[5];
		test[10] = 80;
		System.out.println("test[10]に80を代入しました。");
	}
	catch(ArrayIndexOutOfBoundsException e) {
		System.out.println("配列の要素を超えています");
	}
	finally {
		System.out.println("最後に必ずこの処理を行います");
	}
	System.out.println("無事に終了されました");
}

結果

配列の要素を超えています
最後に必ずこの処理を行います
無事に終了されました

必ずfinallyブロック内の処理が行われています。