ANSHUL KUMAR:
public class Test15 {
public static void main(String[] args) {
System.out.println(B.x);
}
}
abstract class A {
static int x=99;
A() {
System.out.println("A DC");
}
static {
System.out.println("A SB");
}
}
class B extends A {
static {
System.out.println("B Sb");
}
}
なぜ上記のプログラムでは、子クラスの静的ブロックが実行されませんか?
彼らは次のとおりでした:
x
あるstatic
クラスの変数A
あなたが経由でアクセスしていてもそう、B.x
クラスを初期化する必要はありませんB
。したがって、クラスB
のstatic
初期化は実行されません。
ここでは関連性のJLS 12.4.1引用:
静的フィールド(§8.3.1.1)への参照は、それが、サブクラス、サブインターフェイス、またはクラス実装するインターフェースの名前を介して呼ばれる場合でも、唯一のクラスまたは実際にそれを宣言するインタフェースの初期化を引き起こします。