我可以在Java中定义`default constructor`吗?

Sig*_*dus -3 java theory constructor

我在下面的问题是理论上的,然后是实用 从许多在线可用的Java资源中我发现default constructor一个类的规格低于规范:

  1. 没有参数
  2. 没有throws条款
  3. 有一个空的身体

Java语言规范没有提供定义default constructor,它只说明了这一点

如果类(定义)不包含构造函数声明,则默认构造函数(由编译器)隐式声明.

请注意,措辞implicitly declared暗示明确定义的默认构造函数是可能的.让我们考虑下面的课程:

public class Point {
  private int x;
  private int y;

  public int getX() { return x; } 
  public int getY() { return y; } 
}
Run Code Online (Sandbox Code Playgroud)

对于这个类,编译器将生成以下默认构造函数:

public Point() {
  super();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我作为一个程序员实现一个构造函数,public Point() { }它可以被称为default constructor上面的类Point吗?如果没有,那么任何明确定义的构造函数都可以被认为是default constructor?我很欣赏某位专家或者对这个主题绝对肯定的答案.

M.K*_*.K. 5

如果您明确定义了任何构造函数,那么它就不能是默认构造函数,即使您编写的代码与编译器生成的默认构造函数完全等效.默认,这里,表示程序员没有任何操作.

更新:OP希望根据证据得出答案

第13.4.12节"方法和构造函数声明"(JLS8)中的编译器规则:

  1. 如果在类中声明没有构造函数,则编译器会生成默认构造函数.

证据:如果非内部类的源代码不包含声明的构造函数,则隐式声明不带参数的默认构造函数(第8.8.9节).

  1. 如果在类中声明了一个或多个构造函数,即使它是一个无参数构造函数,并且类似于编译器生成的默认构造函数,你的显式构造函数将替换编译器生成的默认构造函数.为了进一步强调这一点,你的显式no-arg构造函数等同于编译器生成的构造函数,而不是编译器生成的构造函数.

证据:将一个或多个构造函数声明添加到此类的源代码将阻止此默认构造函数被隐式声明,从而有效地删除构造函数,除非其中一个新构造函数也没有参数,因此替换了默认构造函数.

  • 你只是想迂腐或者你的问题背后有什么真正的价值吗?您现在正在进入英语中某些单词含义的领域!正如我在原始答案中提到的并且有证据支持,你不能明确地定义一个默认的构造函数.它是Java中的MEANINGLESS语句.您可以显式定义一个构造函数,其外观和行为类似于编译器生成的默认构造函数但是它永远不会被认为是**默认**构造函数.它只考虑用户定义的构造函数.你现在明白了吗? (2认同)