Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个Java应用程序需要多少构造函数?_Java_Constructor - Fatal编程技术网

一个Java应用程序需要多少构造函数?

一个Java应用程序需要多少构造函数?,java,constructor,Java,Constructor,因此,如果我有一个名为“X”的公共类,它有5个变量。我必须为每个变量组合编写构造函数吗?我的教学没有为我澄清这一点,但我认为这是没有必要的,因为应用程序可能会太重(或不是?),否则这可能会增加应用程序的灵活性 提前谢谢你。视情况而定 从我所看到的情况来看,五个实例变量的数量并不是很大,因此一个采用5参数的构造函数不会是世界上最糟糕的事情。正如您所知,Java允许您在一个类中拥有多个构造函数,因此您可以使用一个为某些参数提供默认值的构造函数来重载接受5参数的构造函数,例如: public Test

因此,如果我有一个名为“X”的
公共类,它有5个变量。我必须为每个变量组合编写构造函数吗?我的教学没有为我澄清这一点,但我认为这是没有必要的,因为应用程序可能会太重(或不是?),否则这可能会增加应用程序的灵活性

提前谢谢你。

视情况而定

从我所看到的情况来看,五个实例变量的数量并不是很大,因此一个采用
5
参数的构造函数不会是世界上最糟糕的事情。正如您所知,Java允许您在一个类中拥有多个构造函数,因此您可以使用一个为某些参数提供默认值的构造函数来重载接受
5
参数的构造函数,例如:

public Test(int a, int b, String c, long d, float e) {
    this.a = a;
    this.b = b;
    this.c = c;
    this.d = d;
    this.e = e;
}

public Test(int a, int b) {
    this(a, b, "Test", 0L, 3.14F);
}

如果在实例化对象时只想初始化部分实例变量而不是全部实例变量,也可以查看。如果需要,可以不提供公共构造函数

使用Java,您可以使用多个构造函数来实现对象初始化的正确行为。它们的数量来自可能的真实场景。例如,如果最后两个参数是可选的,或者可以根据以前的参数进行估计,请提供此类构造函数

您还可以对this()使用一些技巧,如下所示:

public class Test {
    private int a;
    private int b;
    private int c;
    private int d;

    public Test(int a, int b, int c, int d) {
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
    }

    public Test(int a, int b) {
        this.a = a;
        this.b = b;
        this.c = 0;
        this.d = 0;

        // or: this(a, b, 0, 0);
    }

    public Test() {
        this(5, 1, 0, 0);
    }
}

在定义构造函数时,我会问自己,为了拥有一个类的工作实例,我需要的最少信息是什么。例如,类java.io.File有4个构造函数,它们都有一个指向该文件的路径。没有空构造函数,因为没有路径或文件系统位置的文件没有意义


现在对于Bike类,您可能希望定义一个空构造函数,用标准的Bike属性初始化实例:2个轮子等,然后根据需要定制setter。

添加构造函数不会使应用程序变得沉重,只是可读性较差,而且在添加从来没有人使用过的构造函数时会浪费时间。您还可以在通过setter方法构造对象之后设置变量,实际上很常见的情况是,变量不是由构造函数设置的,而是以后才设置的。构造函数用于变量,这些变量必须在构造时设置或经常设置以方便使用。您不需要提供任何构造函数,因为Java编译器将为您创建一个构造函数。有关更多信息,请参见Java中的
默认构造
。另请参见构造复杂对象的步骤。