据我们所知,Java对象的字段以这种方式初始化:
false
0
null
我的问题是哪种机制(方法)正在做这项工作以及何时这样做?
答案 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
。