質問

aを検討してください 静的フィールドのみを備えたJavaクラス そして、コンストラクターはありません:

public class OnlyStatic {
   static O1 o1 = new o1();
   static O2 o2 = new o2();

   public static int compute(int whatever) {
       return o1.foo+o2.bar+whatever;
   }
}

別のクラスでは、メソッド compute どちらかによって使用されます static import:

static import OnlyStatic.compute
int a = OnlyStatic.compute(3);

または、直接、発信者が同じパッケージに含まれていると仮定します。

int a = OnlyStatic.compute(3);

O1とO2はいつ初期化されますか?インポートまたはいつ compute() 初めて呼ばれますか?

役に立ちましたか?

解決

オブジェクト o1o2 あなたは利用できません static それらを作らずにコンテキスト static また。

jvms それを述べています

クラスで宣言された静的イニシャルサイザーは、クラスが初期化されたときに実行されます

さらに遠く

クラスまたはインターフェイスタイプ t 次のいずれかの最初の発生の直前に初期化されます。

  • t のクラスとインスタンスです t 創造された。
  • t 宣言されたクラスと静的方法です t 呼び出されます。
  • 宣言された静的フィールド t 割り当てられています。
  • 宣言された静的フィールド t 使用され、フィールドは一定の変数ではありません(§4.12.4)。
  • t はトップレベルのクラスであり、内部に字句的にネストされているアサートステートメント(§14.10)です t 実行されます。

したがって、あなたの場合、静的メソッドの場合 compute() 最初です 実行された.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top