2013-04-02 41 views
4

領域據我們都知道Java對象的字段以這種方式被初始化的初始initialiazation:哪些機制負責在Java中

  • 布爾變量得到false
  • 其他原始類型(如int,字節,長的,)獲得0
  • 對象獲得null

我的問題是機制(方法)就是幹這個工作和W母雞是否這樣做?

回答

6

這些初始化是在JVM創建類的新實例時完成的。請參閱Creation of new class instances部分。它指出:

每當創建一個新的類的實例,存儲空間分配 它與空間中的類 類型聲明的所有實例變量,並在 類的每個超類聲明的所有實例變量類型,包括可能隱藏的所有實例變量 (第8.3節)。

如果沒有足夠的空間可用於爲 對象分配內存,然後創建類實例的與 的OutOfMemoryError突然結束。否則,新對象 中的所有實例變量(包括超類中聲明的那些變量)都會初始化爲 其默認值(§4.12.5)。

的默認值是針對每種類型的實例變量的如下:

  • 對於byte類型,默認值是零,即,(byte)0值。
  • 對於類型short,默認值爲零,即值爲(short)0。對於類型int,默認值爲零,即0。對於類型long,默認值爲零,即0L。對於類型float,默認值爲正零,即0.0f
  • 對於double類型,默認值爲正零,即0.0d
  • 對於char類型,默認值爲空字符,即'\u0000'
  • 對於boolean類型,默認值爲false
  • 對於所有reference types(§4.3),默認值爲null
+0

如此看來,這使得它的JVM'new'關鍵字試圖通過分配該對象所需的空間來創建所選類的新對象(和它的超類,它的父類,依此類推,直至對象) *將字段值設置爲「零」*。然後在構造函數中初始化「更正」值。我誤解了一些東西嗎? – Pshemo

+0

@Pshemo關鍵字'new'是創建對象的方法之一。它創建的對象使JVM能夠分配所需的空間並將字段的值設置爲「default」。是的,你的話是正確的:然後初始化爲分配的值出現在'constructor'或者'instance initializer'中。 –

+0

@Pshemo謝謝。這似乎是bCONSTRUCTOR!正在這樣做。 –