2017-08-23 12 views
2
public class A extends B { 
    public static final int CONST = 6; 

... some logic ... 
} 

public class C { 
    private int addNumber(int x) { 
     return x + A.CONST; 
    } 
} 

クラスCのjUnitテストが、クラスAのフィールドをロードするかどうか、クラスAの拡張子(クラスB)のすべてのロジックが完全にロードされているかどうかが疑問です。クラスは静的メンバー依存関係に完全にロードされますか?

この場合、JVMはどのように動作していますか?

ありがとうございます!

+0

例のコードでは、クラスAがロードされていない可能性があります。コンパイラがA.CONSTの値を(public static final修飾子のために)許可されているクラスCにインライン展開することを決めた場合、クラスCはクラスAへの参照を持たないため、JVMにはクラスAをロードする理由 –

答えて

0

最初にクラスAを参照すると、クラスは完全にロードされます。 AがBを拡張すると、クラスBも完全にロードされます。 Bのすべての静的初期化子と静的フィールドは、Bで指定された順序で実行され、Aで初期化され、CONSTフィールドを抽出するコードに戻ります。

関連する問題