数组是编程语言中最常见的一种数据结构,可用于存储多个数据,每个数组元素存放一个数据,通常可通过数组元素的索引来访问数组元素,包括为数组元素赋值和取出数组元素的值。Java语言的数组具有其特有的特性。
理解数组:数组也是一种类型
-
Java 的数组要求所有的数组元素具有相同的数据类型,因此,在一个数组中,数组元素的类型是唯一的,即一个数组里只能存储一种数据类型的数据,而不能存储多种数据类型的数据。
-
注意:因为 Java 语言是面向对象的语言,而类与类之间可以支持继承关系,这样可能产生一个数组可以存放多种数据类型的假象。
(子类会自动向上转型) -
一旦数组的初始化完成,数组在内存中所占的空间将被固定下来,因此数组的长度将不可改变。即使把某个数组元素的数据清空,但它所占的空间依然被保留,依然属于该数组,数组的长度依然不变。
-
Java 的数组即可以存储基本类型数据,也可以存储引用类型的数据,只要所有的数组元素具有相同类型即可。
-
指定指出的是,数组也是一种数据类型,它本身是一种引用类型,例如 int 是一个基本类型,但 int[] (这是定义数组的一种方式) 就是一种引用类型了。
定义数组
- java语言支持两种语法格式来定义数组
type[] arrayName;
type arrayName[];
- 推荐使用第一种格式。因为第一种格式不仅具有更好的语意,而且具有更好的可读性。对于
type[] arrayName
,很容易理解这是定义一个变量,其中变量名是 arrayName,而变量类型是type[]
.前面已经指出:type[] 确实是一种新类型,与 type 类型完全不同(例如int
类型是基本类型,但int[]
是引用类型)。因此,这种方式即容易理解,也符合定义变量的语法。 - 数组是一种引用类型的变量,因此使用它定义一个变量时,仅仅表示定义了一个引用变量(也就是定义了一个指针),这个引用变量还未指向任何有效的内存空间,所以还没有内存空间来存储数组元素,因此这个数组也不能使用,只有对数组进行初始化后才可以使用。
- 注意:定义数组时不能指定数组的长度,例:
int[3] array; ×
数组初始化
- Java语言中数组必须先初始化,然后才能使用。所谓初始化,就是为数组的数组元素分配内存空间,并为每个数组元素赋初始值。
- 只要为数组元素分配了内存空间,(不管以哪种方式来初始化数组) 数组元素就具有了初始值。初始值的获得由两种形式:①由系统自动分配;②由程序员指定。
数组初始化的两种方式:
-
静态初始化:始化时由程序员显示指定每个数组元素的初始值,由系统决定数组长度 格式:
arrayName = new type[] {e1, e2, e3 ,e4 };
注:静态初始化,不要再写上数组长度如:type[4]
,系统会根据程序员显示指定的元素,确认数组长度。(元素个数已经很明确,所以不要画蛇添足)静态初始化还有简化语法格式:type[] arrayName = {e1, e2, e3, e4};
-
动态初始化:初始化时程序员只要指定数组长度,由系统为数组元素分配初始值。格式 :
arrayName = new type[ length ];
动态初始化数组后,数组的每个元素都会分配一个初始值,如果此时想为数组值指定值,格式:arrayName[ index ] = 值;
index 数组元素下标-从0开始。
系统分配的初始值规则如下:
- 数组元素类型是基本类型中的整数类型(byte, short, int 和 long),则数组元素的值是0.
- 数组元素类型是基本类型中的浮点类型(float, double),则数组元素的值是0.0.
- 数组元素类型是基本类型中的字符类型(char ),则数组元素的值是’\u0000’.
- 数组元素类型是基本类型中的布尔类型(byte, short, int 和 long),则数组元素的值是false.
- 数组元素类型是引用类型(byte, short, int 和 long),则数组元素的值是null.
数组初始化完成后,就可以使用数组了,包括为数组元素赋值,访问数组元素值和获取数组长度(arrray.length )等.