什么时候构造函数称为默认构造函数? [复制]

Posted

技术标签:

【中文标题】什么时候构造函数称为默认构造函数? [复制]【英文标题】: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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

【参考方案3】:

DefaultConstructor JLS

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

【讨论】:

【参考方案4】:

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

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

喜欢阅读:Providing Constructors for Your Classes

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

【讨论】:

【参考方案5】:

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

【讨论】:

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

C++构造和析构

拷贝构造函数(c++常问问题一)

java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?

如果类具有参数化构造函数,为啥Java不提供默认构造函数? [复制]

拷贝构造函数 和 赋值操作符重载

为啥当类包含任何参数化构造函数时编译器不提供默认构造函数? [复制]