2013-03-01 304 views
8

我對Java中的變量初始化有困惑。據我所知,類變量獲取默認初始化,而本地變量默認情況下不初始化。但是,如果我在使用new關鍵字的方法內創建數組,它默認會初始化。所有對象都是如此嗎?是否使用new關鍵字初始化對象,而不管它是類變量還是局部變量?java中的初始化初始化

+1

你嘗試一下,看看會發生什麼? – 2013-03-01 19:22:30

+0

是的,我嘗試了其他物體,這似乎是發生,這就是爲什麼我問這個問題 – 2013-03-01 19:24:35

回答

2

所有對象都是如此嗎?不管它是類變量還是局部變量,是否使用new關鍵字初始化對象 ?

當您使用new關鍵字。這意味着你有初始化你的對象。如果它在方法級別或實例級別聲明,則無關緊要。

public void method(){ 
Object obj1;// not initialized 
Object obj2 = new Object();//initialized 
} 
+1

謝謝你的澄清。這是我正在尋找的。 – 2013-03-01 19:29:40

+0

@BM歡迎:) – PermGenError 2013-03-01 19:31:16

5

經過進一步調查,原始類型只有在它們是成員變量時纔會初始化爲默認值,如果未初始化,局部變量將引發編譯錯誤。

如果您創建一個基元數組,它們將默認初始化(對於本地數組和成員數組都是如此),您需要實例化每個對象的數組。

+0

我不確定這一點。當我在一個方法中聲明一個原語時,默認情況下它不會被初始化。如果我嘗試在沒有初始化的情況下使用它,我會收到一個編譯錯誤。 – 2013-03-01 19:25:53

+0

是的,編譯器會吐出「這個變量可能沒有被初始化」消息的未初始化本地原語 – 2013-03-01 19:28:57

+0

@JeffHawthorne真的嗎?我在前面沒有一個java編譯器來測試這個,但我認爲原型總是會在聲明時被賦予默認值,而不管在哪裏。 – 2013-03-01 19:30:06

27

Java Language Specification

每個類變量,實例變量,或陣列部件被初始化時創建它的默認值(§15.9,§15.10):

  • 對於字節類型,默認值爲零,也就是 (字節)0的值。

  • 對於short類型,默認值爲零,即(short)的值爲0。

  • 對於int類型,默認值是零,即,0

  • 對於類型長,默認值是零,即,0L。

  • 對於浮點類型,默認值爲正零,即0.0f。

  • 對於double類型,默認值爲正零,即0.0d。

  • 對於char類型,默認值爲空字符,即'\ u0000'。

  • 對於布爾類型,默認值爲false。

  • 對於所有引用類型(第4.3節),默認值爲null

+0

+ +1爲真正列出所有原始類型,我太懶了=)。 – 2013-03-01 19:25:38

+0

謝謝,我知道初始化值初始化時是什麼。我只是不確定在什麼情況下對象被默認初始化。 – 2013-03-01 19:27:50

+0

這應該是被接受的答案。 – 2017-10-09 23:30:05