Java数组结构

Java数组结构,java,arrays,Java,Arrays,我是Java编程的新手。在迈出一步之前,我正在澄清我的所有概念。我在读数组一章,其中说创建数组的基本结构是: Type[] var_name = new Type[limit]; 我正在看一些开放式课件的幻灯片。在这些幻灯片中,他们在数组的类型中插入了一个类名。例如: public class Baby { Baby[] siblings; } 有人能解释一下基本数组结构和类内编写的结构之间的区别吗。我想这可能只是混淆了类型的构成。供参考: Type[] var_name = new

我是Java编程的新手。在迈出一步之前,我正在澄清我的所有概念。我在读数组一章,其中说创建数组的基本结构是:

Type[] var_name = new Type[limit];
我正在看一些开放式课件的幻灯片。在这些幻灯片中,他们在数组的类型中插入了一个类名。例如:

public class Baby {
   Baby[] siblings;
}

有人能解释一下基本数组结构和类内编写的结构之间的区别吗。

我想这可能只是混淆了类型的构成。供参考:

Type[] var_name = new Type[limit]
“Type”必须替换为任何基本类型(int、double等)以及任何类(Baby,在您的情况下),例如:

String [] string_array = new String[10];
如果这不是问题所在,那么这两个语句之间的另一个区别是第一个语句实际上创建了一个大小为“limit”的数组,并将其分配给变量var_name。。。而在Baby声明中,只声明了Baby类中的成员变量“兄弟姐妹”。该变量可以保存一个小数组,但该数组尚未创建。在Baby构造函数中,您可能会看到如下内容:

Baby() {
     siblings = new Baby[100];
}

这将创建一个大小为100的Baby类对象引用数组,并将其分配给正在创建的Baby实例的兄弟成员。

Baby[]sibling
只是一个数组声明。它表示编译器
Baby
包含一个数组类型的变量。
您提到的第一行是“声明”数组以及“初始化”数组。
通过初始化,编译器根据数组的大小分配内存。此时可以在数组变量中插入实际值

数组基本上是一个连续内存块,它可以包含基本数据类型或您创建的类型的对象。Java是一种静态类型的语言——您必须在编译时指定参数的类型。因此,在声明数组时指定类型,即使在初始化数组时,您只是在初始化一个连续的内存块。通过指定类型,编译器知道该内存将保存该“类型”的对象或原语

Type[] type = new Type[size];
上面的代码行创建一个大小为“size”的连续内存块。它保存“type”类型的元素(在本例中,它只是您希望数组保存的元素类型的占位符)。请注意,您必须在此处指定类型

当您有电话线时:

Baby[] siblings;
您正在声明数组。您仍然没有初始化它。使用前,应将其初始化为:

siblings = new Baby[size];

只有在这一点上,才会为该数组分配内存。

不同之处在于,通过这种设计,您可以决定该类的客户端是否可以直接操作该数组。它将取决于你给类的设计。@azurefrog这不是问题:基本数组结构和类内编写的结构之间有什么区别。如果这有帮助,它基本上会产生一堆婴儿。它与任何其他阵列都没有什么不同。每个婴儿都会被引用,例如兄弟姐妹[1]。getName()您实际上可以创建每种类型的数组,无论它们是基元(
int
long
,…)还是类。有一件事:你不应该使用
限制
,而应该使用
大小
。数组不会“增长”。如果您创建它(通过调用
new Type[size]
),它将为
size
分配内存-许多
Type
s.OP-您能确切地说明这件事困扰您的原因吗?没有
=
的事实以及它后面的内容,或者使用了类名的事实?或者别的什么?这意味着如果我写类名而不是类型,数组将采用类的基本类型?它是否仅用于指定数组的基元类型?引用中使用的单词“type”必须替换为实际类型,就像“limit”必须替换为数字一样。那么,是的,数组将只能保存对该类型对象的引用。如果您使用“int[]int\u array=new int[100]”,那么该数组只能容纳100个int,没有字符串,等等。非常感谢。我得到了它。