ExceptionInInitializerError
日本語 | 初期化時例外異常 |
英語 | exception in initializer error |
ふりがな | えくせぷしょんいんいにしゃらいざーえらー |
フリガナ | エクセプションインイニシャライザーエラー |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.lang.ExceptionInInitializerError。
static初期化子内で例外が投げられた場合に投げられる。Errorクラスのサブクラスのため厳密には例外ではない。
static初期化子は「クラスを使用した時」に呼ばれる特殊なメソッドである。「クラスを使用した時」とは「インスタンスを作成した時」よりも前であり、使用する側から「呼び出す」メソッドではない。
そのため、基本的にstatic初期化子で発生した例外はcatchで拾うことができず、そのためこのような形で投げられる。
static初期化子内で例外が投げられた場合に投げられる。Errorクラスのサブクラスのため厳密には例外ではない。
static初期化子は「クラスを使用した時」に呼ばれる特殊なメソッドである。「クラスを使用した時」とは「インスタンスを作成した時」よりも前であり、使用する側から「呼び出す」メソッドではない。
そのため、基本的にstatic初期化子で発生した例外はcatchで拾うことができず、そのためこのような形で投げられる。
// Sample.java
public class Sample
{
public static void main( String[] args )
{
try
{
// NormalClassクラスを使います。
// (インスタンスを作る必要はありません)
String name = NormalClass.class.getName();
}
catch( ExceptionInInitializerError e )
{
e.printStackTrace();
// java.lang.ExceptionInInitializerError
// at java.lang.Class.forName0(Native Method)
// at java.lang.Class.forName(Class.java:140)
// at Sample.main(Sample.java:10)
// Caused by: java.lang.NullPointerException
// at NormalClass.<clinit>(Sample.java:35)
// ... 3 more
// このように、staticメソッド内で例外が投げられると
// ExceptionInInitializerError例外が発生します。
}
}
}
/**
* 普通のクラス。
*/
class NormalClass
{
/**
* static初期化子。
*/
static
{
// NullPointerException例外を投げさせます。
Integer integer = null;
integer.toString();
}
}
public class Sample
{
public static void main( String[] args )
{
try
{
// NormalClassクラスを使います。
// (インスタンスを作る必要はありません)
String name = NormalClass.class.getName();
}
catch( ExceptionInInitializerError e )
{
e.printStackTrace();
// java.lang.ExceptionInInitializerError
// at java.lang.Class.forName0(Native Method)
// at java.lang.Class.forName(Class.java:140)
// at Sample.main(Sample.java:10)
// Caused by: java.lang.NullPointerException
// at NormalClass.<clinit>(Sample.java:35)
// ... 3 more
// このように、staticメソッド内で例外が投げられると
// ExceptionInInitializerError例外が発生します。
}
}
}
/**
* 普通のクラス。
*/
class NormalClass
{
/**
* static初期化子。
*/
static
{
// NullPointerException例外を投げさせます。
Integer integer = null;
integer.toString();
}
}
// Sample.java public class Sample { public static void main( String[] args ) { try { // NormalClassクラスを使います。 // (インスタンスを作る必要はありません) String name = NormalClass.class.getName(); } catch( ExceptionInInitializerError e ) { e.printStackTrace(); // java.lang.ExceptionInInitializerError // at java.lang.Class.forName0(Native Method) // at java.lang.Class.forName(Class.java:140) // at Sample.main(Sample.java:10) // Caused by: java.lang.NullPointerException // at NormalClass.<clinit>(Sample.java:35) // ... 3 more // このように、staticメソッド内で例外が投げられると // ExceptionInInitializerError例外が発生します。 } } } /** * 普通のクラス。 */ class NormalClass { /** * static初期化子。 */ static { // NullPointerException例外を投げさせます。 Integer integer = null; integer.toString(); } }