2016-07-13 3 views
-2

これは尋ねる小さな質問ですが、この奇妙な動作を理解したかったのです!以下は、(コンソール出力を介して)議論中のコードのコードと動作です。空の中カッコ内のコードがクラスのコンストラクタの前でも最初に実行されるのはなぜですか?

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)?

+1

次回は先行研究を行います。真剣に。私はなぜ人々が明白な重複をupvotingしているのか分からない... – GhostCat

+2

いくつかの詳細については(http://stackoverflow.com/questions/12550135/static-block-vs-initializer-block-in-java) – emotionlessbananas

+0

注:これは静的初期化子ではなく、インスタンス初期化子です。 – Jesper

答えて

5

the piece of code within the empty bracesはインスタンスイニシャライザブロックと呼ばれます。クラスのインスタンスが作成されるたびに、コンストラクタ本体の前に(そしてスーパークラスのコンストラクタが実行された後に)実行されます。

1

これは、EmptyBracesWithinClassを実行する前に、EmptyBracesをインスタンス化して呼び出すためです。静的イニシャライザブロックが最初に実行され、次にコンストラクタが実行されます。

+0

これは最初にお読みください(http://stackoverflow.com/questions/12550135/static-block-vs-initializer-block-in-java) – emotionlessbananas

+0

あなたの指摘に感謝します。しかし、私は静的イニシャライザブロックを正確に意味します。私は私の答えを編集します、ありがとう。 –

関連する問題