问题
究竟什么是默认构造函数 - 你能告诉我以下哪一个是默认构造函数,以及它与其他构造函数的区别是什么?
public Module() {
this.name = "";
this.credits = 0;
this.hours = 0;
}
public Module(String name, int credits, int hours) {
this.name = name;
this.credits = credits;
this.hours = hours;
}
#1 热门回答(204 赞)
他们都不是。如果你定义它,它不是默认值。
除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。它会将任何未初始化的字段初始化为其默认值。对于你的示例,它看起来像假设类型是String
,int
和int
:
public Module()
{
super();
this.name = null;
this.credits = 0;
this.hours = 0;
}
这完全一样
public Module()
{}
和根本没有构造函数完全相同。但是,如果定义至少一个构造函数,则不会生成默认构造函数。
参考:Java Language Specification
###澄清
从技术上讲,默认初始化字段不是构造函数(默认或其他)。但是,我在答案中留下了这个
- 问题是默认错误和
- 包括或不包括它们,构造函数具有完全相同的效果。
#2 热门回答(28 赞)
如果未在类中定义任何构造函数,则会创建默认构造函数。它只是一个没有参数的构造函数。编辑:除了调用super()
public Module(){
}
#3 热门回答(17 赞)
如果你没有在类中明确定义至少一个构造函数,则编译器会自动生成默认构造函数。你已经定义了两个,所以你的类没有默认的构造函数。
PerThe Java语言规范第三版:
8.8.9默认构造函数如果类不包含构造函数声明,则会自动提供不带参数的默认构造函数...