Java 默认构造函数

标签 java constructor default-constructor

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

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

最佳答案

他们都不是。如果你定义它,它就不是默认的。

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

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

这完全一样

public Module()
{}

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

引用:Java Language Specification

If a class contains no constructor declarations, then a default constructor with no formal parameters and no throws clause is implicitly declared.

澄清

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

  • 问题的默认设置错误,并且
  • 无论是否包含构造函数,其效果完全相同。

关于Java 默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4488716/

相关文章:

c++ - 错误 C2512 : 'Tile' : no appropriate default constructor available

java - wsimport maven 任务不起作用

java - 使用 ant 脚本为我的所有项目自动增加 ivy 修订版

java - 使用ThreadPool顺序执行类似的任务

c++ - 在 C++ 中调用构造函数

C++为什么我不能在具有已删除默认构造函数的对象上使用交换

java - JAXB 和继承

c++ - 传递数组时没有匹配的调用函数

c++ - union 成员有一个重要的复制构造函数

c++ - 什么时候私有(private)构造函数不是私有(private)构造函数?