2017-11-11 10 views
0
public class Tmp { 
    public static void main(String[] s) { 
     //new Tmp(); //comment 1 
    } 
    A a = new A(1); //comment 2 
} 

class A { 
    A(int i) { 
     System.out.println("value in A: " + i); 
    } 
} 

オブジェクトaは、コメント2の行の後に作成されたものとします。しかし何も印刷されませんでした。 コメント1の行を有効にした後でのみ、 "value in A:1"が表示されます。オブジェクトが実際に作成されたとき、私はそれを混乱させますか?対照的に、static A a = new A(1);は、コメント1の行が無効であっても、 "A:1の値"を出力します。インスタンスは本当にA a = new A()の後に作成されますか?

誰でもこの背後にある技術を説明できますか?ありがとう。

答えて

5

A aは、囲むクラスのフィールドです。

(非静的)フィールドは、そのクラスのオブジェクトをインスタンス化するときに初期化されます。あなたのaフィールドは、new Tmp()が行われた場合にのみが「塗りつぶされた」です。

これがすべてです。