例外処理を行っている「e」の変数に対し、printStackTraceを使うと、コールスタックが表示されます。
e.printStackTrace()と書くと、どのメソッドから例外が投げられたのかを表示することができます。
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) {
//スタックトレースを使うと、コールスタックが表示され、
//どのメソッドの中から例外が投げられているのかがわかります
e.printStackTrace();
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 ! java.lang.ArrayIndexOutOfBoundsException: 100 at TestPackage.ExecptionTest1.TestFunc(ExecptionTest1.java:28) at TestPackage.ExecptionTest1.main(ExecptionTest1.java:13) TestFunc start ! 例外 -> java.lang.ArrayIndexOutOfBoundsException: 100 Void Main end !
こうすることで、(ExecptionTest1.java:28)と(ExecptionTest1.java:13)という情報がわかるので、そのソースファイルのエラー原因(上記の場合は配列のインデックスを超えて代入しようとした際のエラー)を注意深く追うことができます。