什么是默认构造函数头[重复]
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: 如果 Circle
是public
。
@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 反序列化:没有找到适合类型的构造函数 - 可以提供默认构造函数或注释构造函数 [重复]