小编典典

Java 默认构造函数

all

究竟什么是默认构造函数?您能告诉我以下哪一项是默认构造函数,以及它与任何其他构造函数的区别是什么?

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;
}

阅读 57

收藏
2022-08-17

共1个答案

小编典典

他们都不是。如果您定义它,则它不是默认值。

默认构造函数是自动生成的无参数构造函数,除非您定义另一个构造函数。任何未初始化的字段都将设置为其默认值。对于您的示例,假设类型是String,intint,
并且类本身是公共的,它看起来像这样:

public Module()
{
  super();
  this.name = null;
  this.credits = 0;
  this.hours = 0;
}

这与

public Module()
{}

和完全没有构造函数完全一样。但是,如果您定义了至少一个构造函数,则不会生成默认构造函数。

参考:Java
语言规范

如果一个类不包含构造函数声明,则隐式声明一个没有形式参数且没有 throws 子句的默认构造函数。

澄清

从技术上讲,默认初始化字段的不是构造函数(默认或其他)。但是,我将其保留为答案,因为

  • 问题的默认设置错误,并且
  • 无论是否包含构造函数,构造函数都具有完全相同的效果。
2022-08-17