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;
}