有人可以解释这个阵列发生了什么吗?

时间:2015-05-24 08:31:12

标签: java arrays initialization

我很困惑我的阵列是如何形成的。这是为了制作数组而编写的内容。

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

我认为数据来自这个类:

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

这是一种从另一个类或其他东西的构造函数声明数组的方法吗?我很困惑,但它确实有效。

有人可以向我解释为什么写成Room[] rooms = new Room[]

3 个答案:

答案 0 :(得分:2)

打破它:

Room[] rooms

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

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

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

答案 1 :(得分:1)

这是数组的内联初始化。

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

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

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

此外,请注意数组是最终的 - 一旦你为它指定了一些东西,那就是它(你可以改变数组中的数据,但不是它的长度 - 或者改变它来指向不同的数组)。如果您的数据是最终的 - 将所有数据一次性分配就更清楚了。

最后,它是静态的 - 你不能在构造函数中执行它,除非你确定它是NULL(第一次它会工作,但之后的所有其他都会失败,因为你&#39 ; d试图重新分配一个共同的最终对象)。

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

答案 2 :(得分:0)

在此声明并初始化array房间。看 -

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类构造函数。看看由此创建的Room对象 - new Room ("GARDEN0001", "NorthWest Garden View", 45.00)将在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)