【问题标题】: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 都看完。

标签: java


【解决方案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),则编译器不会添加默认构造函数。如果需要,您必须自己显式添加此构造函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多