哪种机制负责Java中字段的初始初始化

时间:2013-04-02 19:11:49

标签: java

据我们所知,Java对象的字段以这种方式初始化:

  • 布尔变量获得false
  • 其他原始类型(例如int,byte,long,)get 0
  • 对象获取null

我的问题是哪种机制(方法)正在做这项工作以及何时这样做?

1 个答案:

答案 0 :(得分:6)

这些初始化是在JVM创建类的新实例时完成的。请参阅Creation of new class instances部分。它声明:

  

每当创建新的类实例时,都会分配内存空间   为它提供了在类中声明的所有实例变量的空间   type和在每个超类中声明的所有实例变量   类类型,包括可能隐藏的所有实例变量   (§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
  •