[解決済み] 静的クラスの初期化はいつ行われるのか?
質問
静的フィールドはいつ初期化されるのですか? クラスをインスタンス化することなく、静的フィールドにアクセスした場合、プライベート静的フィールドのインスタンス化に使用したすべての静的ブロックとプライベート静的メソッドは、その瞬間に(順番に)呼び出されるのでしょうか?
静的メソッドを呼び出したらどうなるのでしょうか?すべての静的ブロックも実行されますか?メソッドの前に?
どのように解決するのですか?
クラスの静的初期化は、通常、次のイベントのいずれかが初めて発生する直前に行われます。
- クラスのインスタンスが生成される。
- クラスの静的メソッドが呼び出される。
- クラスの静的フィールドが割り当てられる。
- 定数でない静的フィールドが使用されている、または
- <ストライク トップレベルクラスの場合、そのクラス内に辞書的にネストされた assert 文が実行されます。 1 .
参照 JLS 12.4.1 .
また、クラスを強制的に初期化することも可能です(まだ初期化されていない場合)。
Class.forName(fqn, true, classLoader)
あるいは、短い形式の
Class.forName(fqn)
静的なクラスの初期化はいつ行われるのですか?
上記を参照してください。
<ブロッククオート静的フィールドはいつ初期化されるのですか?
静的なクラス初期化の一部として、上記を参照してください。
クラスをインスタンス化することはないが、静的フィールドにアクセスする場合、プライベート静的フィールドのインスタンス化に使用されるすべての静的ブロックとプライベート静的メソッドは、その瞬間に(順番に)呼び出されるのでしょうか?
はい、そうです。 (本当に瞬間的なものはないということを前提に)。
静的メソッドを呼び出したらどうなりますか?すべての静的ブロックも実行されるのでしょうか?メソッドの前に?
はい、そしてはい。
を観測するようなコードを構築することが可能であることに注意してください。 デフォルトの初期化された の値を観測するようなコードを構築することが可能であることに注意してください。
1 - 最後の箇条書きは、Java 6 から Java 8 の JLS に存在しましたが、どうやら仕様の誤りだったようです。 これは最終的に Java 9 の JLS で修正されました。 ソース .
関連
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
[解決済み] ArrayListの初期化を1行で行う。
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] Javaクラスにおけるcanonical name、simple name、class nameの違いは何ですか?
-
[解決済み] Javaにおける静的クラス
-
[解決済み] 静的変数が悪とされるのはなぜですか?
-
[解決済み】クラスで「static」キーワードは何をするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Solve モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory エラー
-
StringBuilderが投げるArrayIndexOutOfBoundsExceptionの探索
-
Jsoup-Crawlingの動作
-
無効な文字定数
-
SpringBoot 起動エラー java.nio.charset.MalformedInputException: 入力長 = 2 解決
-
java.sql.SQLException: 結果セットの開始前
-
Web Project JavaでPropertiesファイルを読み込むと、「指定されたファイルがシステムで見つかりません」というソリューションが表示されます。
-
org.xml.sax.SAXParseExceptionのエラー解決方法
-
テストが空であるかどうかを判断するためのオプションの処理
-
IDEAError:javaの依存性エラー。Annotation processing is not supported for module cycles...(アノテーション処理はモジュールサイクルではサポートされていません。