静的クラスはいつ初期化されますか?
-
28-10-2019 - |
質問
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()
初めて呼ばれますか?
解決
オブジェクト o1
と o2
あなたは利用できません static
それらを作らずにコンテキスト static
また。
jvms それを述べています
クラスで宣言された静的イニシャルサイザーは、クラスが初期化されたときに実行されます
クラスまたはインターフェイスタイプ t 次のいずれかの最初の発生の直前に初期化されます。
- t のクラスとインスタンスです t 創造された。
- t 宣言されたクラスと静的方法です t 呼び出されます。
- 宣言された静的フィールド t 割り当てられています。
- 宣言された静的フィールド t 使用され、フィールドは一定の変数ではありません(§4.12.4)。
- t はトップレベルのクラスであり、内部に字句的にネストされているアサートステートメント(§14.10)です t 実行されます。
したがって、あなたの場合、静的メソッドの場合 compute()
最初です 実行された.
所属していません StackOverflow