什么是默认构造函数头[重复]

Posted

技术标签:

【中文标题】什么是默认构造函数头[重复]【英文标题】:What would be the default constructor header [duplicate] 【发布时间】:2016-10-09 14:56:48 【问题描述】:

我是 java 新手,正在尝试掌握有关默认构造函数的标头的概念。

Circle 中第一个构造函数的头部是:

public Circle(String label, int radius)

如果决定为类添加一个默认构造函数。这个默认构造函数的标题是什么?

我在网上看过,但没有真正看到简洁的答案。

【问题讨论】:

您的意思可能是signature 而不是header - 它将是public Circle() 构造函数的头部是什么意思? 默认构造函数总是无参数的。 @mszymborski: 如果 Circlepublic @T.J.Crowder:谢谢,我不知道。总有一天我得把整个 JLS 都看完。 【参考方案1】:

如果决定为类添加默认构造函数。

没有决定添加默认构造函数。如果您根本不指定任何构造函数,编译器会为您添加一个。

它添加的那个是由JLS§8.8.9定义的:

如果一个类不包含构造函数声明,则隐式声明一个默认构造函数。***类、成员类或本地类的默认构造函数形式如下:

默认构造函数具有与类相同的可访问性(第 6.6 节)。

默认构造函数没有形式参数,除非在非私有内部成员类中,默认构造函数隐式声明一个形式参数,表示该类的直接封闭实例(第 8.8.1 节、第 15.9.2 节、第15.9.3)。

默认构造函数没有 throws 子句。

如果声明的类是原始类 Object,则默认构造函数的主体为空。否则,默认构造函数只会调用不带参数的超类构造函数。

所以如果Circle 是公开的,那么默认的签名是:

public Circle()

例如,完整生成的版本是:

public Circle() 
    super();

【讨论】:

非常感谢您抽出宝贵时间提供信息。【参考方案2】:

请记住,只有在另一个构造函数不存在时才会添加默认构造函数。因此,如果该类包含 public Circle(String label, int radius),则编译器不会添加默认构造函数。如果需要,您必须自己显式添加此构造函数。

【讨论】:

以上是关于什么是默认构造函数头[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用虚拟继承时调用默认构造函数[重复]

c# 中的类和构造函数在不同程序集中的 c# 中的默认访问说明符是啥 [重复]

使用杰克逊的 JSON 反序列化:没有找到适合类型的构造函数 - 可以提供默认构造函数或注释构造函数 [重复]

Java 默认构造函数问题 - 啥实际上构成了“默认构造函数”? [复制]

CString构造函数

c ++调用非默认构造函数作为成员[重复]