如何设置/使用二维数组作为Java类的成员
我知道这可能是一个非常基本的Java问题,但我对Java完全是个新手 假设我有以下两个Java类:如何设置/使用二维数组作为Java类的成员,java,arrays,memory,Java,Arrays,Memory,我知道这可能是一个非常基本的Java问题,但我对Java完全是个新手 假设我有以下两个Java类: public class Cell { private Integer value; public Integer setValue(Integer value) { this.value = value; } public Integer getValue() { return value; } } public
public class Cell {
private Integer value;
public Integer setValue(Integer value) {
this.value = value;
}
public Integer getValue() {
return value;
}
}
public class Grid {
private Cell[][] cells = new Cell[9][9];
public void setCell(int row, int column, Integer value){
cells[row][column].setValue(value);
}
}
更不用说,如果行或列超过8,代码是不安全的,我的理解是Grid为9 x 9个单元格分配内存,因此方法setCell(1,1,10)应该是正常的(即不会导致NullPointerException),对吗?然而,在为这种情况进行JUnit测试时,这正是我遇到的错误。我只能克服这个错误,而不是
cells[row][column].setValue(value);
我用
但我有一个印象,我是实例化细胞两次。我错过了什么?这是说明书吗
private Cell[][] cells = new Cell[9][9];
仅仅分配结构(即指针)来保存单元格对象,而不实际为对象本身保留内存
谢谢
@Tryskele创建任何对象类型的数组(任何维度)时,数组的所有元素都初始化为null
。没有隐式创建对象,因此还没有创建单元格
对象。仅使用此行创建阵列:
private Cell[][] cells = new Cell[9][9];
cells[row][column] = new Cell();
这就是您必须使用此行的原因:
private Cell[][] cells = new Cell[9][9];
cells[row][column] = new Cell();
您没有两次创建单元格。只能显式地创建单元格
,并且必须创建一次
private Cell[][] cells = new Cell[9][9];
不创建81个单元格实例,而是创建一个数组来存储这些对象。新单元格[9][9]
创建一个数组,该数组可以容纳单元格
对象的实例,但实际上并不填充单元格
类的新实例。而是用null
填充
一开始你可能会觉得奇怪,但这种行为是有原因的,很简单:
- 编译器无法决定应该使用哪个构造函数
- 但即使它可以知道,它仍然不知道哪些数据应该作为构造函数参数传递
就像File
类没有参数构造函数new File()
(这样的文件代表什么?)一样,程序员有责任决定如何初始化新对象以及何时将它们放入数组中
最常见的方法是在构造函数中执行,或者如果您有很多,也可以使用初始化块(它将移动到每个构造函数),如:
类网格{
专用小区[][]小区=新小区[9][9];
{
对于(int i=0;i