1.数组简介
数组是编程语言中最常见的一种数据类型,可用于储存多个数据,每个数组元素存放一个数据,通常可通过数组的索引来访问数组元素,包括数组元素赋值和取出每个数组的值,Java的数组要求所有的数组元素具有相同的数据类型。另外,一旦数组的初始化完成,数组在内存中所占的空间便被固定下来,因此数组的长度将不可改变。即使把某个数组元素的数据清空,但它所占的空间依然被保留,依然属于该数组,数组的长度依然不变。
2.定义数组
Java支持两种语法格式来定义数组:
(1) type[] arraryName;(推荐使用)
(2)type arraryName[];
数组是一种引用类型的变量,因此使用它定义一个变量时,仅仅定义了一个引用变量(也就是定义了一个指针),这个引用变量并未指向任何有效的内存,因此定义数组时不能指定数组的长度。只有对这个数组进行初始化后才能使用。
3.数组的初始化
Java语言中数组必须进行初始化才能使用,所谓初始化就是为数组的数组元素分配内存空间,并为每个数组元素赋初值。
数组的初始化有如下两种方式:
(1)静态初始化:初始化时有程序员显式指定每个数组元素的初始值,由系统决定数
组长度。
静态初始化的语法格式如下:
arrarName = new type[] {element1,element2,...}
type必须与定义数组变量时所使用的type相同,也可以与定义数组时所指定的type的子类
//定义一个int数组类型的变量变量名为intVal
int[] intVal;
//使用静态初始化,初始化数组时只指定数组元素的初始值,不指定数组长度
intVal = new int[]{5,6,8,20};
//定义一个Object数组类型的变量,变量名为objArr
Object[] objArr;
//使用静态初始化,初始化数组时的类型是定义数组时数组元素的类型的子类
objectArr = new String[]{"Java" , "June"};
Object[] objArr2;
objArr2 = new Object[]{"Java", "June"};
除此之外,静态初始化还有如下简化的语法格式:
arrayName = {element1,element2,...}
实际开发中,可能更习惯将数组的定义和数组初始化同时完成:
int[] a= {1,2,3,4}
(2)动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。
arraryName = new type[length];
//数组的定义和初始化同时完成,使用动态初始化语法
int[] prices = new int[5];
//数组的定义和初始化同时完成,初始化数组时元素的类型是定义数组时元素类型的子类
Object[] books = new String[4];
执行动态初始化时,程序员只需指定数组的长度,即为每个数组元素指定所需的内存的空间,系统将负责为这些数组元素分配初始值。指定初始值时,系统按如下规则分配初始值。
>数组元素的类型是基本类型中的整数类型(byte、short、int和long),则数组元素的值是0
>数组元素的类型是基本类型中的浮点类型(float和double),则数组元素的值是0.0>数组元素的类型是基本类型中的字符类型(char),则数组元素的值是'\u0000'
>数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值是false
>数组元素的类型是引用类型(类、接口和数组),则数组元素的值是null
4.使用数组
数组最常用的用法就是访问数组元素,包括对数组元素进行赋值和取出数组元素的值。访问数组元素都是通过在数组引用变量后紧跟一个方括号([]),方括号里是数组的索引值,这样就可以访问数组元素了(Java语言的数组索引是从0开始的)。
(程序清单同上)
//输出objArr数组的第二个元素,将输出字符串"June"
System.out.println(objArr[1]);
//为objArr2的第一个数组元素赋值
objArr2[0] = "spring";
下面代码示范了为动态初始化的数组元素进行赋值,并通过循环的方式输出每个数组元素(程序清单同上)
//对动态初始化后的数组元素进行赋值
books[0] = "疯狂Java讲义";
books[1] = "轻量级Java EE企业应用实战";
for(int i = 0; i <books.length;i++){
System.out.println(biiks[i]);
}
上面的代码将先输出字符串"疯狂的Java讲义"和"轻量级Java EE企业应用实战",然后输出两个null.
5.foreach循环
从Java5以后,Java提供了一种更简单的循环:foreach循环,这种循环遍历数组和集合更加简洁。使用foreach循环遍历数组和集合元素时,无需获得数组和集合的长度,无须根据索引来访问数组元素和集合元素,foreach循环自动遍历数组和集合的每个元素。
foreach循环的语法格式如下:
for(type variableName : array | collection){
//variableName 自动迭代访问每个元素...
}
public class ForEachTest {
public static void main(String[] args){
String[] books = {"轻量级 Java EE企业应用实战","Java疯狂讲义","疯狂Android讲义"};
//使用foreach循环遍历数组元素
//其中book将会自动迭代每个数组元素
for(String book : books ){
System.out.println(book);
}
}
}
运行结果如下:
6.深入数组
数组时一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里时候分开存放的。下面将深入介绍数组在内存中的运行机制。
(1)内存中的数组