Java 默认构造函数

2022-08-31 06:46:50

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

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

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

默认构造函数是自动生成的无参数构造函数,除非您定义了另一个构造函数。任何未初始化的字段都将设置为其默认值。对于您的示例,假设类型是 、 和 ,并且类本身是公共的,则如下所示:Stringintint

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

这与

public Module()
{}

这与根本没有构造函数完全相同。但是,如果至少定义一个构造函数,则不会生成默认构造函数。

参考:Java 语言规范

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

澄清

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

  • 问题弄错了默认值,并且
  • 构造函数具有完全相同的效果,无论它们是否被包含。

答案 2

如果未在类中定义任何构造函数,则会创建默认构造函数。它只是一个无参数构造函数,它什么都不做。编辑:除了调用超级()

public Module(){
}