什么时候是一个名为默认构造函数的构造函数?

时间:2014-02-21 08:44:37

标签: java constructor default-constructor

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

class X {}

class Y {

    Y () {}

}

class Z {

    Z(int i ) {} 

}

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

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

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

5 个答案:

答案 0 :(得分:4)

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

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

  

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

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

  

或者我们可以在类中定义构造函数   在初始化对象时谈到默认构造函数?

默认构造函数是指,生成编译器,没有参数构造函数。每个其他构造函数都被称为使用定义的构造函数。

答案 1 :(得分:4)

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

如果你没有声明任何构造函数,那么将定义一个隐式的no-args构造函数。

如果声明任何构造函数,则不会定义隐式no-args构造函数。

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

答案 2 :(得分:1)

DefaultConstructor JLS

  

默认构造函数是Java默认提供的构造函数。你明确写的任何东西都不是默认的。

答案 3 :(得分:0)

默认构造函数然后进入图片,然后才进入,

当您没有为班级提供任何构造函数时

喜欢阅读:Providing Constructors for Your Classes

  

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

答案 4 :(得分:0)

如果您未定义任何constructor默认constructor,则会进入该场景。在其他所有情况下,您都必须使用定义constructors