Java 未调用默认构造函数

Java 未调用默认构造函数,java,oop,constructor,default-constructor,Java,Oop,Constructor,Default Constructor,原因: 如果一个类不提供任何构造函数,那么编译器在编译时会给出没有参数的默认构造函数,但是如果一个类包含参数化构造函数,那么编译器不会提供默认构造函数 我正在编译下面的代码。它给出了编译错误 代码: 控制台错误: 当我只调用参数化构造函数时。它可以正常工作。但是当您希望使用参数化构造函数调用默认构造函数时。编译器给出编译错误,如图所示 任何直接的帮助都是非常值得的。谢谢如果您提供了构造函数,则默认构造函数不会添加到类中。你必须自己定义它。你的问题的答案在你提供的段落中 但如果类包含参数化构造函数

原因: 如果一个类不提供任何构造函数,那么编译器在编译时会给出没有参数的默认构造函数,但是如果一个类包含参数化构造函数,那么编译器不会提供默认构造函数

我正在编译下面的代码。它给出了编译错误

代码:

控制台错误:

当我只调用参数化构造函数时。它可以正常工作。但是当您希望使用参数化构造函数调用默认构造函数时。编译器给出编译错误,如图所示


任何直接的帮助都是非常值得的。谢谢

如果您提供了构造函数,则默认构造函数不会添加到类中。你必须自己定义它。

你的问题的答案在你提供的段落中

但如果类包含参数化构造函数,则编译器不提供默认构造函数


您创建了一个参数化构造函数,因此没有提供默认的非构造函数,因此必须自己创建它

使用javac ConstructorTest.java编译时出现错误
因为您声明了参数化构造函数-public constructorestint x,int y。所以编译器并没有为类提供任何默认构造函数[public ConstructorTest]。因此,您不能在第28行调用公共构造函数测试

我不知道你为什么问这个问题。您自己说过,但是如果一个类包含参数化构造函数,那么编译器就不会提供默认构造函数……这就解释了

原因是这样可以编写结构,例如:

struct Test
{ 
    int a;
    double d;
};
它没有构造函数。用户不关心成员是否已初始化。它主要用于包含数据。然后可通过以下方式使用:

Test t;
最终的结果是打字更少。如果你关心变量是如何初始化的,或者初始化它们的逻辑是异常的,那么你就编写一个构造函数。然后假设默认构造函数会做一些错误或非预期的事情,因此不提供它


对于析构函数也可以这样说。如果不介意,将提供一个默认析构函数,它以相反的顺序销毁您的成员并调用基本析构函数。如果覆盖它,则不会生成默认的构造函数。

Um,因此请提供您自己的无参数构造函数-就这么简单。编译器只在您没有明确提供默认构造函数的情况下提供一个默认构造函数。这是-的一个非常精确的副本,应该包含您需要的信息want@JonSkeet,我完全同意你的看法。我只是想知道为什么?这就是语言的定义方式。。。如果你问为什么语言是这样设计的,你的很多问题都是多余的。@JonSkeet,我只想知道背后的原因。我同意你的观点,我想知道为什么会发生这种情况?如果一个类包含参数化构造函数,那么为什么编译器不提供默认构造函数?参见链接的@Razib帖子我同意你的观点,我想知道为什么会发生这种情况?如果一个类包含参数化构造函数,那么为什么编译器不提供默认构造函数?@Rohit Jindal,你可能会看到链接-我同意你的观点,我想知道为什么会发生这种情况?如果类包含参数化构造函数,那么为什么编译器不提供默认构造函数?
Test t;