有人可以解释一下这个数组是怎么回事吗?

Can someone explain what is going on with this array?

我对我的数组是如何形成的很困惑。这就是写成数组的内容。

public class TestProgram {

public static final Room[] rooms = new Room[]
{
  new Room ("GARDEN0001", "NorthWest Garden View", 45.00),
  new Room ("GARDEN0002", "SouthEast Garden View", 65.0),
  new Room ("GARDEN0003", "North Garden View", 35),
  new Room ("GARDEN0004", "South Garden View", 52),
  new Room ("GARDEN0005", "West Garden View", 35),
  new Room ("GARDEN0006", "East Garden View", 35)
};

我认为数据来自这个 class:

public class Room {
    public Room(String roomId, String description, double dailyRate){
        this.roomId = roomId;
        this.description = description;
        this.dailyRate = dailyRate;
        this.status = 'A';
    }

我们用这种方法从另一个 class 的构造函数中声明数组吗?我很困惑,但它有效。

谁能解释一下为什么写成Room[] rooms = new Room[]

分解:

Room[] rooms

声明一个名称为 rooms 类型为 Room[] 的静态字段(一个 class 变量),它是 Room 个对象的数组。

= new Room[] {new Room...};

Room 个对象初始化数组并定义数组的大小(在 java 中无法更改)。

这是数组的内联初始化。

"Normally" 你会声明一个特定长度的数组,然后初始化它或放入相关数据(可能在一个循环中)。但是,它可以在一行中完成,就像这里一样 - 一个更简单的例子是:

int[] numbers = new int[]{2, 3, 5};

这里我们有相同的情况,只是 "numbers" 是 Room 对象(每个都在此处创建和初始化)而不是 int 数字。

此外,请注意数组是最终的——一旦你给它赋值,就是这样(你可以更改数组中的数据,但不能更改它的长度——或者将它更改为指向不同的数组)。如果您的数据是最终的 - 一次分配它会更清楚。

最后,它是静态的 - 你不能在构造函数中执行它,除非你确保它为 NULL(第一次它会工作,但之后的每一次都会失败,因为你会尝试重新分配一个公共最终对象)。

总而言之,最终静态数组的内联声明和初始化。 :-)

在这里声明并初始化一个 array 的 Room。看 -

Room rooms[] // declaration of 'Room' array    

之后 -

new Room[]
{
  new Room ("GARDEN0001", "NorthWest Garden View", 45.00),
  new Room ("GARDEN0002", "SouthEast Garden View", 65.0),
  new Room ("GARDEN0003", "North Garden View", 35),
  new Room ("GARDEN0004", "South Garden View", 52),
  new Room ("GARDEN0005", "West Garden View", 35),
  new Room ("GARDEN0006", "East Garden View", 35)
}; //initialization of the array.  

现在这里你Room是用你这里提到的数组元素创建的,大小为6。你的数组声明和初始化实际上等同于下面的代码片段-

int[] intArray = new int[]{11,222,333, 444};    

是的,您输入数组 rooms 的数据来自 Room class 构造函数。并查看由此 -new Room ("GARDEN0001", "NorthWest Garden View", 45.00) 创建的 Room 对象将在 room[0] 中找到。同样 -

room[1] <-- new Room ("GARDEN0002", "SouthEast Garden View", 65.0)
room[2] <-- new Room ("GARDEN0003", "North Garden View", 35)
room[3] <-- new Room ("GARDEN0004", "South Garden View", 52)
room[4] <-- new Room ("GARDEN0005", "West Garden View", 35)
room[5] <-- new Room ("GARDEN0006", "East Garden View", 35)