如果类具有参数化构造函数,为什么Java不提供默认构造函数?

rig*_*gel 7 java constructor

如果类具有参数化构造函数,为什么Java不提供默认构造函数?请考虑以下示例

class A {
    int a;

    public A() {
    }

    public A(int val) {
        a = val;
    }
}
Run Code Online (Sandbox Code Playgroud)

这里我明确需要添加默认构造函数.有什么理由,为什么Java不为具有参数化构造函数的类提供默认构造函数?

Chr*_*ken 9

原因与安全性和界面的组合有关.编译器不应该为您提供未明确定义的方法.如果您未指定任何构造函数,则一个例外是一个方便的无参数构造函数.如果确实指定了构造函数,则编译器假定您不需要任何其他构造函数.


luk*_*657 5

因为如果编译器会自动为每个类提供arg构造函数,它会破坏类设计.考虑一下Scanner类.它有很少的构造函数,您可以在其中指定要从哪里读取数据.如果编译器也没有添加arg构造函数,那么在调用Scanner的一个方法从用这个构造函数初始化的对象中读取数据之后,将抛出异常,因为不会指定数据源.


Rod*_*aki 2

如果你的类没有定义任何构造函数,Java 会给你一个默认构造函数。

如果您定义了任何构造函数(即使是没有任何参数的构造函数),编译器将不会为您提供另一个构造函数。

它的工作原理是这样的,因为它是这样指定的。您可以在语言规范中阅读更多相关信息

  • OP 知道“如果类有参数化构造函数,Java 不提供默认构造函数”。问题是“为什么”? (6认同)