我在练习dome Java OO原理时遇到了这个问题。我创建到POJO,当试图从中生成对象时,如果没有定义空的构造函数,它就不会编译。
我觉得这很奇怪,因为我以前经常这样做,JVM为我提供了一个默认的JVM。它在Java7中是新的吗?我是不是错过了什么?
这是我制作的样本代码
public class Dog {
String name;
String race;
int age;
/*
public Dog() {
If this isn't included, it doesn't compile if I try to
create no-args objects.
}*/
public Dog (String _name) {
this.name = _name;
}
public Dog (String _name, String _race) {
this.name = _name;
this.race = _race;
}
public Dog (String _name, String _race, int _age) {
this.name = _name;
this.race = _race;
this.age = _age;
}
}
使用Dog newDog = new Dog();
在当前代码中不起作用,因为您尚未定义它。
如果不存在其他构造函数,则仅自动生成默认构造函数。
您不必为类提供任何构造函数,但在执行此操作时必须小心。编译器自动为任何没有构造函数的类提供无参数的默认构造函数此默认构造函数将调用超类的无参数构造函数。在这种情况下,如果超类没有无参数构造函数,编译器会抱怨,因此您必须验证它是否有。如果你的类没有显式的超类,那么它有一个Object的隐式超类,它确实有一个无参数构造函数。
来源:http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
如果定义带参数的构造函数,还必须定义一个不带参数的默认构造函数。在这种情况下,无法创建新的Dog(Dog d = new Dog()
),因为没有定义不带args的构造函数。
"如果一个类定义了显式构造函数,它就不再有默认的构造函数来设置对象的状态。如果这样的类需要默认构造函数,则必须提供其实现。如果在这种情况下没有提供显式默认构造函数,那么任何调用默认构造函数的尝试都将是编译时错误。"
http://www.javabeginner.com/learn-java/java-constructors