如果我在Java中添加一个无参数构造函数,JVM是否会添加默认构造函数或调用我提供的no-arg?

时间:2017-09-09 23:05:18

标签: java constructor

我的问题是 - 当我打印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()
        }
   }

1 个答案:

答案 0 :(得分:2)

如果你没有在类中定义任何构造函数,编译器只会添加一个no-arg构造函数。无论如何,你不能有两个具有相同签名的构造函数,儿子添加第二个无参数构造函数是没有意义的。

您的名称为null,因为如果代码没有为它们分配任何内容,则始终为字段分配默认值,并且引用类型的defaut值为null。原始数字类型为0,布尔值为假。