throwable caught!
を私は初期化ブロックの間に悪い何かをする場合、私はExceptionInInitializerErrorをキャッチできることを期待したいです。
class InitError {
static int[] x = new int[4];
static { //static init block
try{
x[4] = 5; //bad array index!
} catch (ExceptionInInitializerError e) {
System.out.println("ExceptionInInitializerError caught!");
}
}
public static void main(String[] args){}
}
出力:ただし、以下では動作しません
java.lang.ExceptionInInitializerError
Caused by: java.lang.ArrayIndexOutOfBoundsException: 4
at InitError.<clinit>(InitError.java:13)
Exception in thread "main"
を、私はさらには、ArrayIndexOutOfBoundsException
class InitError {
static int[] x = new int[4];
static { //static init block
try{
x[4] = 5; //bad array index!
} catch (ExceptionInInitializerError e) {
System.out.println("ExceptionInInitializerError caught!");
} catch (ArrayIndexOutOfBoundsException e){
System.out.println("ArrayIndexOutOfBoundsException caught!");
}
}
public static void main(String[] args){}
}
をキャッチするためにコードを変更した場合には、引っ掛かりArrayIndexOutOfBoundsExceptionがあります:
ArrayIndexOutOfBoundsException caught!
誰でも私にその理由を教えてもらえますか?
'ExceptionInInitializerError'があなたの' try'ブロックの中にスローされていません。 'static'ブロックからキャッチされない例外がスローされたことが原因です。 – khelwood