これは尋ねる小さな質問ですが、この奇妙な動作を理解したかったのです!以下は、(コンソール出力を介して)議論中のコードのコードと動作です。空の中カッコ内のコードがクラスのコンストラクタの前でも最初に実行されるのはなぜですか?
public class EmptyBracesWithinClass {
public static void main(String[] args) {
EmptyBraces eb = new EmptyBraces();
System.out.println("SYSO within main() method");
}
}
class EmptyBraces {
{
System.out.println("SYSO within empty braces");
}
public EmptyBraces() {
System.out.println("SYSO within constructor() method");
}
}
コンソール出力:
SYSO within empty braces
SYSO within constructor() method
SYSO within main() method
それは次のように宣言されることはありませんけれども、空の中括弧内のコードの一部は、(EmptyBraces
クラスのオブジェクトインスタンスの作成時に最初に実行になるだろう理由はここに質問、 STATIC
)?
次回は先行研究を行います。真剣に。私はなぜ人々が明白な重複をupvotingしているのか分からない... – GhostCat
いくつかの詳細については(http://stackoverflow.com/questions/12550135/static-block-vs-initializer-block-in-java) – emotionlessbananas
注:これは静的初期化子ではなく、インスタンス初期化子です。 – Jesper