我的问题是 - 当我打印String名称的值时,它是null(这是可以理解的)。但是,是因为JVM默认构造函数还是因为我提供的那个?我假设如果我提供构造函数,它将被调用,JVM将不会调用默认构造函数。但我的构造函数是空的,所以谁为字符串设置null?
class Animal{
String name;
//no-arg constructor I provided which does nothing
Animal(){
}
void printName() {
System.out.println("name: "+name);
}
public static void main(String[] args) {
Animal cat = new Animal();
cat.printName()
}
}
答案 0 :(得分:2)
如果你没有在类中定义任何构造函数,编译器只会添加一个no-arg构造函数。无论如何,你不能有两个具有相同签名的构造函数,儿子添加第二个无参数构造函数是没有意义的。
您的名称为null,因为如果代码没有为它们分配任何内容,则始终为字段分配默认值,并且引用类型的defaut值为null。原始数字类型为0,布尔值为假。