假设我有一个类B
,它有一个类C
类型成员作为字段。
现在我写了一个构造函数,B
这样它的默认构造函数就不会被合成。
但是B's
构造函数不会C
显式初始化该类型字段。
Class B
{
C obj_c;
B()
{ }
}
在 C++ 中,默认构造函数obj_c
将被称为因为非初始化成员的默认构造函数将被隐式调用为 Object 类型成员。Java 呢?
如果构造函数不初始化 Java 中的字段会发生什么?
假设我有一个类B
,它有一个类C
类型成员作为字段。
现在我写了一个构造函数,B
这样它的默认构造函数就不会被合成。
但是B's
构造函数不会C
显式初始化该类型字段。
Class B
{
C obj_c;
B()
{ }
}
在 C++ 中,默认构造函数obj_c
将被称为因为非初始化成员的默认构造函数将被隐式调用为 Object 类型成员。Java 呢?
如果构造函数不初始化 Java 中的字段会发生什么?
未初始化的成员变量会自动初始化false
为布尔值、0
数字和null
对象引用,这就是obj_c
这里的位置。它被初始化为null
.
编辑
将其初始化为的不是构造函数null
;根据Java Language Specification,如果您不初始化类变量和实例变量,Java 将初始化它们。
C 的构造函数不会被隐式调用。它必须通过字段初始化或构造函数的设置显式调用。