有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

class A {
    int a;

    public A() {
    }

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

在这里,我明确地需要添加默认构造函数。Java为什么不为具有参数化构造函数的类提供默认构造函数呢


共 (4) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    如果您的类没有定义任何构造函数,Java将为您提供一个默认构造函数

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

    它是这样工作的,因为它是这样指定的。您可以在Language Specification中阅读更多关于此的信息

  3. # 3 楼答案

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

  4. # 4 楼答案

    原因在于安全性和接口的结合。编译器不应该给你没有明确定义的方法。一个例外是,如果您没有指定任何构造函数,那么就可以方便地使用无参数构造函数。如果您确实指定了构造函数,编译器会假定您不需要任何其他构造函数