javaの例外は、プログラムの誤りを通知し、適切なエラー処理を行う為の機能になります。
例外をうまく使うことで、エラーが起こった時にうまく処理する仕組みにすることができます。
例外の例
ArrayIndexOutOfBoundsException 配列の長さを超えている
FileNotFoundException ファイルが見つからなかった
IllegalArgumentException 引数が異常な値だった
OutOfMemoryError メモリが足りなくなった
等のエラーを拾うことができ、エラー内容に応じた処理にするとキレイなコードになります。
実際にテストコードを書いて、例外をおこしてみます。
下記のコードを書いてコンパイルすると、コンパイルエラーがおきます。
public class TestException {
public static void main(String[] args) {
int[] TestArray = new int[3];
TestArray[50] = 0;
}
}
上のコードのエラーを、例外をキャッチしてエラー処理を行うようにしてみます。
public class TestException {
public static void main(String[] args) {
int[] TestArray = new int[3];
try {
TestArray[50] = 0;
} catch(Exception e) {
System.out.println("例外 -> " + e);
}
}
}
これを実行すると、次のような結果が出力されます。
例外 -> java.lang.ArrayIndexOutOfBoundsException: 50
さらに、public static void mainの中でメソッドを呼び、そのメソッドの中で例外を発生させる。
package TestPackage;
public class ExecptionTest1 {
public static void main(String[] args) {
int[] TestArray = new int[3];
System.out.println("Void Main start !");
try {
System.out.println("Try start !");
TestFunc(TestArray, 100, 0);
System.out.println("Try end !");
//TestArray[50] = 0;
} catch (Exception e) {
System.out.println("例外 -> " + e);
}
System.out.println("Void Main end !");
}
static void TestFunc(int[] arr, int index, int value) {
System.out.println("TestFunc start !");
arr[index] = value;
System.out.println("TestFunc end !");
}
}
上記のコードを実行すると、次のような出力になる。
Void Main start !
Try start !
TestFunc start !
例外 -> java.lang.ArrayIndexOutOfBoundsException: 100
Void Main end !
Tryの中でTestFuncメソッドが呼ばれ、そのメソッド内で例外が発生したら、
もともとのTryにあるcatchが働き、例外処理がされる。