Java中数组中的对象

Java中数组中的对象,java,arrays,Java,Arrays,我对java是新手,当我看到数组中的对象时,我正在阅读Head first java。代码来自于书本身,我得到了代码的流程,但我并不真正理解第二行。在书中,新狗是做什么的 声明并创建一个Dog数组以保存7个Dog引用 如果我们已经创建了dog引用,为什么还要为单个数组项再次创建dog引用呢 Dog[] pets; pets = new Dog[7]; pets[0] = new Dog(); 在第二行之前,您只是说变量pets存在,它是一个Dog数组,但该数组在内存中不存在,因为它尚未创建 为

我对java是新手,当我看到数组中的对象时,我正在阅读Head first java。代码来自于书本身,我得到了代码的流程,但我并不真正理解第二行。在书中,新狗是做什么的

声明并创建一个Dog数组以保存7个Dog引用

如果我们已经创建了dog引用,为什么还要为单个数组项再次创建dog引用呢

Dog[] pets;
pets = new Dog[7];
pets[0] = new Dog();

在第二行之前,您只是说变量pets存在,它是一个Dog数组,但该数组在内存中不存在,因为它尚未创建


为了能够使用数组并读取/存储其中的值,您需要在内存中实际创建此数组,这就是第2行所做的:它创建一个大小为7的Dog数组。

在第二行之前,您只需说变量pets存在,它是一个Dog数组,但数组在内存中不存在,因为它还没有被创建


为了能够使用数组并读取/存储其中的值,您需要在内存中实际创建此数组,这是第2行所做的:它创建一个大小为7的Dog数组。

第一行声明一个Dog数组类型的变量。第二行实际上使用一个数组对其进行初始化,该数组有七个插槽,每个插槽都为空。第三行创建一个实际的Dog实例,并将其分配给数组的第一个插槽。

第一行声明Dog数组类型的变量。第二行实际上使用一个数组对其进行初始化,该数组有七个插槽,每个插槽都为空。第三行创建一个实际的Dog实例,并将其分配给数组的第一个插槽

Dog[] pets;
这将声明一个dog数组。但是当你养宠物的时候=新狗[7];它将初始化长度为7的数组

pets[0] = new Dog();
此语句将狗的对象存储在第0个位置

这将声明一个dog数组。但是当你养宠物的时候=新狗[7];它将初始化长度为7的数组

pets[0] = new Dog();
此语句将狗的对象存储在第0个位置。

此行pets=new dog[7];创建将包含狗对象的数组对象。 所以最初pets数组中的所有7个索引都是空的。因此宠物[0]=新狗;需要创建狗对象

此行pets=新狗[7];创建将包含狗对象的数组对象。
所以最初pets数组中的所有7个索引都是空的。因此宠物[0]=新狗;需要创建Dog对象

声明和初始化之间存在差异。 Dog[]pets声明变量pets是一个Dogs数组 pets=新狗[7]初始化变量pets,并为其赋值。该值是一个大小为7的数组,其中包含空引用

对于基本体也是如此:

int i; //declaration
i = 5; //initialization
就像你能写的那样

int i = 5;
Dog[] pets = new Dog[7];
你可以写

int i = 5;
Dog[] pets = new Dog[7];

在本例中,您在同一行上执行声明和初始化。

声明和初始化之间存在差异。 Dog[]pets声明变量pets是一个Dogs数组 pets=新狗[7]初始化变量pets,并为其赋值。该值是一个大小为7的数组,其中包含空引用

对于基本体也是如此:

int i; //declaration
i = 5; //initialization
就像你能写的那样

int i = 5;
Dog[] pets = new Dog[7];
你可以写

int i = 5;
Dog[] pets = new Dog[7];
在本例中,您在同一行上进行声明和初始化。

中的每个对象都必须使用关键字new进行初始化,该关键字在堆上分配内存

java中的数组也是对象,因此必须使用新的

默认情况下,数组中的每个对象都有一个空值。因此,您必须再次使用new关键字初始化每个单独的项

每一步的情况:

 Dog[] pets;            // <-- reference to an array of Dog, still uninitialized
 pets = new Dog[7];     // <-- now pets points to an array of 7 Dog's. Array value is [null, null, null, null, null, null, null]
 pets[0] = new Dog();   // <-- array now is [Dog@some_memory_address, null, null, null, null, null, null]
请参阅oracle for Array

中的每个对象都必须使用关键字new进行初始化,这将在堆上分配内存

java中的数组也是对象,因此必须使用新的

默认情况下,数组中的每个对象都有一个空值。因此,您必须再次使用new关键字初始化每个单独的项

每一步的情况:

 Dog[] pets;            // <-- reference to an array of Dog, still uninitialized
 pets = new Dog[7];     // <-- now pets points to an array of 7 Dog's. Array value is [null, null, null, null, null, null, null]
 pets[0] = new Dog();   // <-- array now is [Dog@some_memory_address, null, null, null, null, null, null]

请参阅oracle for array,您正在使用它声明和创建一个java数组,该数组能够包含7个dog类型的项。从机器站点创建指向内存空间的指针以包含对象。

使用该指针,您可以声明并创建一个java数组,该数组可以包含7个dog类型的项。从机器站点创建指向内存空间的指针以容纳对象。

Dog[]pets;:德克瑞斯犬阵 宠物=新狗[7];:在Dog堆上创建一个具有连续内存分配的数组,以保存7个Dog引用,初始值为空。

Dog[]pets;:德克瑞斯犬阵 宠物=新狗[7];:在Dog堆上创建一个具有连续内存分配的数组,以保存最初为null的7个Dog引用。

new Dog[7]创建一个空Dog数组,即[null,null,null,null,null,null,null]。您仍然需要指定一个实际的实例
数组的每个索引的ce。狗[]能够保存狗引用;宠物=新狗[7];尚未保存任何引用。新狗[7]创建一个空的狗数组,即[null,null,null,null,null,null,null,null]。您仍然需要为数组的每个索引分配一个实际实例;宠物=新狗[7];尚未保存任何引用。数组并不总是需要新关键字。检查一下这个链接@MrakVladar,它只是一个简写。在引擎盖下,内存直到用new初始化为止。数组并不总是需要一个新的关键字。检查一下这个链接@MrakVladar,它只是一个简写。在引擎盖下,内存被初始化为新的