当前位置: 首页 > 知识库问答 >
问题:

若类有参数化的构造函数,为什么Java不提供默认构造函数?[副本]

慕高格
2023-03-14

若类有参数化的构造函数,为什么Java不提供默认构造函数?考虑下面的例子

class A {
    int a;

    public A() {
    }

    public A(int val) {
        a = val;
    }
}

这里我明确需要添加默认构造函数。有什么原因,为什么Java没有为具有参数化构造函数的类提供默认构造函数?

共有3个答案

方建明
2023-03-14

在某些情况下,使用默认构造函数是不可取的。该语言必须提供某种方式来告诉编译器不要生成它。使用显式构造函数之外的一些指示符会导致一些问题,例如在禁用默认构造函数时需要指定构造函数。

当前的安排通过确保在禁用默认值时有另一个构造函数来消除该问题。

司徒运锋
2023-03-14

因为如果编译器不会自动为每个类提供arg构造函数,则会破坏类设计。考虑扫描仪类。它几乎没有构造函数,您可以在其中指定从何处读取数据。如果编译器也不添加arg构造函数,那么在调用Scanner的某个方法从使用此构造函数初始化的对象读取数据后,将引发异常,因为不会指定数据源。

常海
2023-03-14

原因与安全性和接口的结合有关。编译器不应该给你没有显式定义的方法。如果不指定任何构造函数,一个例外是方便的无参数构造函数。如果您指定了一个构造函数,编译器会假设您不需要任何其他构造函数。

 类似资料:
  • 为什么java编译器在类包含任何参数化构造函数时不提供默认构造函数。

  • 我有一个有两个构造函数的类。 有一个具有两个构造函数的类Sample。需要在Sample类中实例化另外三个类(ClassOne,ClassTwo和ClassIII)。所有三个类都包含默认和参数化构造函数。如果调用了Sample类的默认构造函数,则应调用ClassOne,ClassTwo和ClassIII的默认辅助构造函数。如果调用Samples参数化构造函数,则调用ClassOne、ClassII

  • 问题内容: 默认构造函数到底是什么?你能告诉我以下哪个是默认构造函数,它与其他构造函数有何不同? 问题答案: 他们都不是。如果定义,则不是默认值。 除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。任何未初始化的字段都将设置为其默认值。对于你的榜样,它看起来像这样假设的类型String,int以及int,那类本身是公共的: 这与 完全没有构造函数。但是,如果定义至少一个构造函数

  • 实际上,我不明白无参数构造函数和默认构造函数的区别是什么。 在创建名为cFrame的Test对象时,是否调用此类的默认构造函数?

  • 当Java中给出参数构造函数时,为什么默认的无参数构造函数会失败? 这个设计有什么意义? 例如:

  • 问题内容: 如果父类中有带参数的构造函数,为什么需要默认构造函数(显式) 这将是一个错误。 问题答案: 这里有两个方面的工作: 如果 确实 明确指定了构造函数(如中所述),则Java编译器将 不会 为您创建无参数构造函数。 如果您未明确指定构造函数(如所示),则Java编译器将为您创建一个无参数的构造函数,如下所示: (可访问性取决于类本身的可访问性。) 试图调用超类无参数构造函数-因此它必须存在