什么时候构造函数称为默认构造函数? [复制]
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
的定义。
【讨论】:
以上是关于什么时候构造函数称为默认构造函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?