[解決済み] Java の静的ブロックが実行されない
2023-04-27 01:26:56
質問
class Test {
public static void main(String arg[]) {
System.out.println("**MAIN METHOD");
System.out.println(Mno.VAL); // SOP(9090);
System.out.println(Mno.VAL + 100); // SOP(9190);
}
}
class Mno {
final static int VAL = 9090;
static {
System.out.println("**STATIC BLOCK OF Mno\t: " + VAL);
}
}
は知っているのですが
static
ブロックはクラスがロードされたときに実行されることは知っています。しかし、この場合、クラス内のインスタンス変数
Mno
は
final
であるため、その分
static
ブロックは実行されません。
なぜそうなるのでしょうか?また、もし私が
final
を削除すれば、うまくいくのでしょうか?
どちらのメモリが先に確保されるかというと
static final
変数と
static
ブロックのどちらを使用しますか?
もし
final
アクセス修飾子によってクラスがロードされない場合、どのようにして変数がメモリを取得できるのでしょうか?
どのように解決するには?
-
A
static final int
フィールドは コンパイル時定数 であり、その値はその起源を参照することなく、宛先クラスにハードコードされます。 - したがって、メインクラスはフィールドを含むクラスのロードをトリガーしません。
- 従って、そのクラス内の静的イニシャライザーは実行されません。
具体的には、コンパイルされたバイトコードがこれに相当します。
public static void main(String arg[]){
System.out.println("**MAIN METHOD");
System.out.println(9090)
System.out.println(9190)
}
を削除すると同時に
final
を削除した時点で、それはもはやコンパイル時の定数ではなく、 上で説明した特別な動作は適用されません。また
Mno
クラスは期待通りにロードされ、その静的イニシャライザが実行されます。
関連
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
java マイクロソフト払い戻し予期せぬサーバーからのファイルの終了
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
Javaでよくある構文エラー
-
メモ帳でJavaプログラムをコンパイルして実行すると、Could not find or load main class ...というエラーが表示される。解決方法
-
Solve モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory エラー
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
JNIエンカウンターエラー:構造体またはユニオンではない何かでメンバー 'FindClass' のリクエスト
-
Java JDKのダイナミックプロキシ(AOP)の使用と実装の原理分析
-
Java基礎 - マッピングとQ/A