私は、インスタンスの初期化(ないクラスの初期化)ブロックで例外をスローしようとすると、私はエラーを取得する:Javaはそれ自体んがJavaインスタンスの初期化ブロックで例外をスローすることができないのはなぜですか?
initializer must be able to complete normally
はそれが許されないのはなぜ?
次の例では、4つのクラスを作成します。クラスA
は、ArithmeticExceptionのためにインスタンス化中に失敗します。これはcatch
で処理できます。 B
と同じで、NullPointerExceptionで失敗します。しかし、私がC
のように自分自身でNullPointerExceptionをスローしようとすると、プログラムはコンパイルされません。 D
のように私自身のRuntimeExceptionを定義しようとすると、同じエラーが発生します。したがって:
Javaと同じように私はどのようにすることができますか?
// -*- compile-command: "javac expr.java && java expr"; -*-
class expr
{
class A
{
int y;
{{ y = 0/0; }}
}
class B
{
Integer x = null;
int y;
{{ y = x.intValue(); }}
}
class C
{
{{ throw new NullPointerException(); }}
}
class Rex extends RuntimeException {}
class D
{
{{ throw new Rex(); }}
}
void run()
{
try { A a = new A(); }
catch (Exception e) { System.out.println (e); }
try { B b = new B(); }
catch (Exception e) { System.out.println (e); }
try { C c = new C(); }
catch (Exception e) { System.out.println (e); }
try { D d = new D(); }
catch (Exception e) { System.out.println (e); }
}
public static void main (String argv[])
{
expr e = new expr();
e.run();
}
}
@AlexWienあなたはクラスとオブジェクトの違いを知っていますか? ;-) – ceving
はい、インスタンスイニシャライザは存在しませんが、私は静的イニシャライザしか知りませんでした。 – AlexWien