タグ付けされた質問 「static-initialization」

6
最終的な定義は不適切ですか?
まず、パズル:次のコードは何を出力しますか? public class RecursiveStatic { public static void main(String[] args) { System.out.println(scale(5)); } private static final long X = scale(10); private static long scale(long value) { return X * value; } } 回答: 0 下のネタバレ。 Xscale(long)で印刷してを再定義するX = scale(10) + 3と、印刷はにX = 0なりX = 3ます。つまり、Xは一時的にに設定され0、後でに設定され3ます。これは違反ですfinal! static修飾子は、final修飾子と組み合わせて、定数の定義にも使用されます。最後の修飾子は、このフィールドの値を変更できないことを示しています。 ソース:https : //docs.oracle.com/javase/tutorial/java/javaOO/classvars.html [強調を追加] 私の質問:これはバグですか?されfinal不明確な? …


1
JVMによる静的初期化
言語:java バージョン:12.0.2 次の文字列ソースコード: /* @implNote * The actual value for this field is injected by JVM. The static * initialization block is used to set the value here to communicate * that this static final field is not statically foldable, and to * avoid any possible circular dependency during vm …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.