抽象クラスから派生した子クラスの静的ブロックの実行

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したがって、クラスBstatic初期化は実行されません。

ここでは関連性のJLS 12.4.1引用

静的フィールド(§8.3.1.1)への参照は、それが、サブクラス、サブインターフェイス、またはクラス実装するインターフェースの名前を介して呼ばれる場合でも、唯一のクラスまたは実際にそれを宣言するインタフェースの初期化を引き起こします。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=234343&siteId=1