【问题标题】:When is a constructor called a default constructor? [duplicate]什么时候构造函数称为默认构造函数? [复制]
【发布时间】:2014-02-21 08:44:37
【问题描述】:

当我们从它们初始化对象时,以下哪些类将使用默认构造函数?

class X {}

class Y {

    Y () {}

}

class Z {

    Z(int i ) {} 

}

class Z 不会使用默认构造函数。 X 类将使用默认构造函数。

但是 Y 呢?用户定义的空构造函数是否称为默认构造函数? 就像他们在维基百科(Java 部分)上所说的那样http://en.wikipedia.org/wiki/Default_constructor

或者当我们在初始化对象时可以说默认构造函数时,类中是否应该没有定义构造函数?

【问题讨论】:

    标签: java constructor default-constructor


    【解决方案1】:

    如果你已经为一个类定义了一个空参数构造函数,那么用户定义的空参数构造函数将替换编译器生成的默认构造函数。

    默认构造函数是自动生成的无参数构造函数,除非您定义另一个没有参数的构造函数。更多详情请查看JLS 8.8.9

    用户定义的空构造函数是否称为默认构造函数?

    不,它被称为使用定义的构造函数。

    或者如果我们可以在类中没有定义构造函数 初始化对象的时候说一下默认构造函数?

    默认构造函数意味着,编译器生成,没有参数构造函数。所有其他的构造函数都被称为使用定义的构造函数。

    【讨论】:

      【解决方案2】:

      “默认”构造函数是无参数(无参数)构造函数。

      如果你不声明 any 构造函数,将定义一个隐式的无参数构造函数。

      如果您声明 any 构造函数,则不会定义隐式无参数构造函数。

      构造新对象时总是调用构造函数,并且该类的每个超类的构造函数也会被调用。如果没有显式调用构造函数,则调用默认构造函数(可能声明也可能不声明)。

      【讨论】:

        【解决方案3】:

        DefaultConstructor JLS

        默认构造函数是 Java 默认提供的。您明确编写的任何内容都不是默认值。

        【讨论】:

          【解决方案4】:

          默认构造函数出现在画面中,然后才出现,

          当你没有为你的类提供任何构造函数时

          喜欢阅读:Providing Constructors for Your Classes

          您不必为您的类提供任何构造函数,但这样做时必须小心。编译器会自动为任何没有构造函数的类提供无参数的默认构造函数。此默认构造函数将调用超类的无参数构造函数。在这种情况下,如果超类没有无参数构造函数,编译器会报错,因此您必须验证它是否存在。如果你的类没有显式的超类,那么它有一个 Object 的隐式超类,它确实有一个无参数的构造函数。

          【讨论】:

            【解决方案5】:

            如果你没有定义任何constructor 默认constructor 将进入场景。其他情况下,您必须使用 constructors 的定义。

            【讨论】:

              猜你喜欢
              • 2021-12-12
              • 2019-03-01
              • 2020-05-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-07-01
              • 2011-04-17
              • 1970-01-01
              相关资源
              最近更新 更多