クラスのスタティックブロックはいつ実行されるか?
2023-08-21 21:23:41
質問
2つのjarがあり、a.jarとb.jarと呼ぶことにします。
b.jarはa.jarに依存しています。
a.jarでは、StaticClassと呼ぶクラスを定義しました。StaticClassでは、静的ブロックを定義し、"init"という名前のメソッドを呼び出すようにしました。
public class StaticClass {
static {
init();
}
public void static init () {
// do some initialization here
}
}
b.jarの中にmainがあり、mainの中でinit()メソッドが呼ばれていると思うのですが、実際には呼ばれていません。私はそれがStaticClassがjvmによってロードされていないためであると思うが、誰か私に教えてください。
- 私の結論は正しいですか?
- jvmがクラスをロードするトリガーは何ですか?
- 静的ブロックを自動的に実行させるにはどうしたらよいですか?
ありがとうございます。
どのように解決するのですか?
はい、あなたは正しいです。静的初期化ブロックは、JVM(クラスローダー - 具体的には) が
StaticClass
をロードするときに実行されます (これは、それがコード内で最初に参照されるときに発生します)。
このメソッドを強制的に呼び出すには、明示的に
StaticClass.init()
これはJVMに依存するよりも望ましいことです。
を使ってみることもできます。
Class.forName(String)
を使用して、JVMにクラスをロードさせ、その静的ブロックを呼び出すように強制することもできます。
関連
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
htmlとwordの相互変換の実装(画像あり)
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] 静的メソッドを使用する場合
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
-
[解決済み】静的なMapを初期化する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
プロジェクトの依存関係を解決できない。
-
Junitのユニットテストはjava.lang.Testを報告します。
-
maven レポート エラー 解決不可能な親POM
-
代入の左辺は変数でなければならない 解答
-
Java JDKのダイナミックプロキシ(AOP)の使用と実装の原理分析
-
Java の double データ型における 0.0 と -0.0 の問題
-
swagger2 モデルが表示されない モデルが見つからない @ApiModel アノテーションが表示されない問題
-
CAS 5.1.8でhttpをサポートし、認証されていない認可サービスエラーのプロンプトが表示される問題を解決した。
-
[解決済み] 静的クラスの初期化はいつ行われるのか?
-
[解決済み] Java の静的/インスタンス・イニシャライザー・ブロックはどのような順序で実行されるのですか?