2013-03-11 156 views
-1

假設我有一個類B其中有一個C類型成員字段。Java字段初始化

現在我寫了一個B的構造函數,以便它的默認構造函數不會被合成。

但是B's構造函數不會顯式初始化那個C類型字段。

Class B 
{ 
    C obj_c; 

    B() 
    { } 
} 

在C++缺省的obj_c構造將被稱爲怎麼把非初始化的成員的默認構造將關於Java對象類型members.What隱含調用??

如果構造函數不初始化Java中的字段會發生什麼?

+1

除非你說'obj_c = new C();','C's'構造函數不會被調用。它會一直保留爲null,直到你初始化它爲止。 – 2013-03-11 20:49:10

+1

在這種情況下,java將obj_c初始化爲null。 – 2013-03-11 20:49:43

+1

想象變量聲明中的每個類型名稱後都有一個'*'(如果不存在,則爲'= 0'),您將得到一些接近C++的東西。 – 2013-03-11 20:51:45

回答

7

未初始化的成員變量自動初始化爲false爲布爾值,0數字,並null對象引用,這是在obj_c落在這裏。它被初始化爲null

編輯

這並不是說被它初始化爲null構造;根據Java Language Specification,如果不初始化它們,Java將初始化類變量和實例變量。

+0

好的,'obj_c'被設置爲'null'與構造函數有什麼關係。是obj_c'null',因爲構造函數將它設置爲空? – tez 2013-03-11 21:25:23

+0

我修改了我的答案。 – rgettman 2013-03-11 21:45:34

1

C的構造函數不是隱式調用的。必須通過字段初始化或從構造函數中設置來顯式調用它。