【问题标题】: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 构造函数,则不会定义隐式无参数构造函数。
构造新对象时总是调用构造函数,并且该类的每个超类的构造函数也会被调用。如果没有显式调用构造函数,则调用默认构造函数(可能声明也可能不声明)。
【解决方案4】:
默认构造函数出现在画面中,然后才出现,
当你没有为你的类提供任何构造函数时
喜欢阅读:Providing Constructors for Your Classes
您不必为您的类提供任何构造函数,但这样做时必须小心。编译器会自动为任何没有构造函数的类提供无参数的默认构造函数。此默认构造函数将调用超类的无参数构造函数。在这种情况下,如果超类没有无参数构造函数,编译器会报错,因此您必须验证它是否存在。如果你的类没有显式的超类,那么它有一个 Object 的隐式超类,它确实有一个无参数的构造函数。
【解决方案5】:
如果你没有定义任何constructor 默认constructor 将进入场景。其他情况下,您必须使用 constructors 的定义。