如果类具有参数化构造函数,为什么Java不提供默认构造函数?考虑以下示例
class A {
int a;
public A() {
}
public A(int val) {
a = val;
}
}
这里我明确需要添加默认构造函数。有什么理由,为什么Java不为具有参数化构造函数的类提供默认构造函数?
如果类具有参数化构造函数,为什么Java不提供默认构造函数?考虑以下示例
class A {
int a;
public A() {
}
public A(int val) {
a = val;
}
}
这里我明确需要添加默认构造函数。有什么理由,为什么Java不为具有参数化构造函数的类提供默认构造函数?
原因与安全性和界面的结合有关。编译器不应该给你没有明确定义的方法。如果您不指定任何构造函数,则一个例外是方便的无参数构造函数。如果您确实指定了构造函数,编译器会假定您不想要任何其他构造函数。
因为如果编译器不会自动为每个类提供 arg 构造函数,它将破坏类设计。考虑 Scanner 类。它的构造函数很少,您可以在其中指定要从何处读取数据。如果编译器也不会添加 arg 构造函数,那么在调用 Scanner 的一种方法以从使用此构造函数初始化的对象中读取数据后,将引发异常,因为不会指定数据源。
在某些情况下,不希望使用默认构造函数。该语言必须提供一些方法来告诉编译器不要生成它。使用除了显式构造函数之外的其他指示符会导致问题,例如在禁用默认值时需要指定构造函数。
当前的安排通过确保在禁用默认值时有另一个构造函数来消除该问题。
如果您的类没有定义任何构造函数,Java 将为您提供默认构造函数。
如果您定义了任何构造函数(即使是没有任何参数的构造函数),编译器也不会再给您一个。
它是这样工作的,因为它是这样指定的。您可以在语言规范中阅读更多相关信息