Java中构造函数的意义是什么

Java中构造函数的意义是什么,java,multidimensional-array,constructor,Java,Multidimensional Array,Constructor,在下面的代码中,仅在构造函数中创建数组是否有任何优点/缺点/原因,即下面的两段代码之间是否有我应该注意的差异 仅在构造函数中 public class multidimensionalarraysExp { public multidimensionalarraysExp() { int[][] intArray = new int[][]{{1, 2, 3},{4, 5, 6},{7, 8, 9}}; } } 与此相比: public class multi

在下面的代码中,仅在构造函数中创建数组是否有任何优点/缺点/原因,即下面的两段代码之间是否有我应该注意的差异

仅在构造函数中

public class multidimensionalarraysExp {

    public multidimensionalarraysExp() {
        int[][] intArray = new int[][]{{1, 2, 3},{4, 5, 6},{7, 8, 9}};
    }
}
与此相比:

public class multidimensionalarraysExp {
    private int[][] intArray;

    public multidimensionalarraysExp() {
        intArray = new int[][]{{1, 2, 3},{4, 5, 6},{7, 8, 9}};
    }
}
我假设这是因为如果我在构造函数中创建它,我不能说它是公共的还是私有的,等等。那么这是默认的吗

当然我可以这么做,但是为什么首先要有一个构造函数呢

public class multidimensionalarraysExp {
        private intArray = new int[][]{{1, 2, 3},{4, 5, 6},{7, 8, 9}};

        public multidimensionalarraysExp() {

        }
    }
一些基本问题,但我不明白为什么需要构造函数

public multidimensionalarraysExp() {
    int[][] intArray = new int[][]{{1, 2, 3},{4, 5, 6},{7, 8, 9}};
}
这里数组只能在构造函数中访问,因为它是构造函数的局部变量

 public multidimensionalarraysExp(int[][] intArray) {
        this.intArray = intArray;
    }
而如果在类级别声明数组,则可以在整个类中访问它,但在以下情况下,当您使用默认构造函数创建类的实例时,可以对其进行初始化

public multidimensionalarraysExp() {
    intArray = new int[][]{{1, 2, 3},{4, 5, 6},{7, 8, 9}};
}
因此,如果您创建
新的多维ArraySExp()
数组将被初始化

为什么首先要有一个构造函数

在第二种情况下,它将仅在创建实例之后而不是之前为变量赋值

如果要为类的不同实例分配不同的数组值,可以将数组作为参数传递给构造函数

 public multidimensionalarraysExp(int[][] intArray) {
        this.intArray = intArray;
    }

在第一个示例中,您将数组声明为局部变量,因此它只能在构造函数中访问

 public multidimensionalarraysExp(int[][] intArray) {
        this.intArray = intArray;
    }
在第二种情况下,整个类(
private
)都可以访问该数组

根据这一点(根据您的情况进行调整),有一些理由选择使用第三种方式:

  • 没有区别-实例变量初始化实际上是由编译器放入构造函数中的
  • 第三个片段更具可读性
  • 不能对第三个代码段进行异常处理
  • 另外还有初始化块,编译器也会将其放入构造函数中

在第一个代码段中,您的数组是一个局部变量,因此它在此类的其他方法中不可用

在您的例子中,在构造函数中初始化数组(第二个代码段)和在声明字段时初始化数组(第三个代码段)没有区别。在构造函数中初始化数组的唯一原因是若要传递一些参数


根据,双向都可以,没有首选项。

构造函数的作用是初始化对象的状态

例如,如果数组的长度或其值根据传递给构造函数的值而变化,则可以使用构造函数初始化数组

 public multidimensionalarraysExp(int[][] intArray) {
        this.intArray = intArray;
    }
例如,一张职业卡可以接受一套西装,这将使用给定的西装初始化所有12张卡


但是,如果数组没有根据构造函数的类型或传递给它的值进行更改,那么在构造函数内部初始化数组是没有意义的。

我知道这是正确的方法,但为什么?在我展示的第三个例子中——为什么这不是一种有效的方法?这不是全班都能理解吗?所以就是这样,因为:)@Danrex我道歉。经过一些研究,我发现我错了。在这一点上,我不会具体推荐一个,因为两者都有优点/缺点。阅读了解更多信息。我认为否决票是因为这样一个问题是任何面向对象语言中“基础训练”的一部分,所以你表示你没有学习过对象,因此,要求接受OOP基础知识的培训。作为一个实例变量,它可以在我们创建多维ArrayseXP对象时设置和获取,否则它仅限于一个范围。不,我想问的是,在许多情况下,当你真的不需要构造函数时,为什么要有一个构造函数。我相信这是一个合理的问题。
 public multidimensionalarraysExp(int[][] intArray) {
        this.intArray = intArray;
    }