CHAPTER 第3章 数 组 本章学习重点: . 了解Java数组的定义。 . 掌握Java数组的操作。 . 理解Java二维数组。 . 理解Java数组的引用传递。 在前面学习的整数类型、字符类型等都是基本数据类型,通过一个变量表示一个数据, 这种变量被称为简单变量。但在实际中,经常需要处理具有相同性质的一批数据,这时可以 使用Java中的数组,用一个变量表示一组性质相同的数据。数组是任何一种编程语言都不 可缺少的数据类型。 3.1 一维数组 数组是一种数据结构,是按一定顺序排列的相同类型的元素集合。数组实际上就是一 连串类型相同的变量,这些变量用一个名字命名,即数组名,并用索引区分它们。使用数组 时,可以通过索引来访问数组元素,如数组元素的赋值和取值。 3.1.1 数组的声明 在Java中,数组是相同类型元素的集合,可以存放成千上万个数据。在一个数组中,数 组元素的类型是唯一的,即一个数组中只能存储同一种数据类型的数据,而不能存储多种数 据类型的数据。数组一旦定义好就不可以修改长度,因为数组在内存中所占大小是固定的, 所以数组的长度不能改变,如果要修改就必须重新定义一个新数组或者引用其他的数组,因 此数组的灵活性较差。 数组是可以保存一组数据的一种数据结构,它本身也会占用一个内存地址,因此数组是 引用类型。 数组的声明包含两个部分:数组类型和数组的名称,定义数组的语法格式如下: type[] 数组名 或 type 数组名[]; 第3章 数组 53 两种不同的语法格式声明的数组中,[]是一维数组的标识,它既可放置在数组名前面 也可以放在数组名后面。例如: int[] x; float y[]; 上述示例中声明了一个int类型的数组x与一个float类型的数组y,数组名是用来统 一这组相同数据类型的元素名称,数组中数组名的命名规则和变量相同。 3.1.2 数组的初始化 在Java程序开发中,使用数组之前都会对其进行初始化,这是因为数组是引用类型,声 明数组只是声明一个引用类型的变量,并不是数组对象本身,只要让数组变量指向有效的数 组对象,程序中就可以使用该数组变量来访问数组元素。所谓数组初始化,就是让数组名指 向数组对象的过程,该过程主要分为两个步骤,一是对数组对象进行初始化,即为数组中的 元素分配内存空间和赋值;二是对数组名进行初始化,即将数组名赋值为数组对象的引用。 通过两种方式可对数组进行初始化,即静态初始化和动态初始化,下面将演示这两种方 式的具体语法。 1.静态初始化 静态初始化是指由程序员在初始化数组时为数组每个元素赋值,由系统决定数组的长 度。数组的静态初始化有两种方式,具体代码如下: int[] x; x=new int[]{10,20,30,40,50}; 或 int x[]=new int[]{10,20,30,40,50} 对于数组的静态初始化也可以简写,具体代码如下: int x[]={10,20,30,40,50} 上述示例中静态初始化了数组,其中大括号中包含数组元素,元素值之间用逗号“,”分 隔。此处注意,只有在定义数组的同时执行数组初始化才支持使用简化的静态初始化。 2.动态初始化 动态初始化是指由程序员在初始化数组时指定数组的长度,由系统为数组元素分配初 始值,具体代码如下: int a[]=new int[10]; 上述示例会在数组声明的同时分配一块内存空间供该数组使用,其中数组长度是10, 由于每个元素都为int型数据类型,因此上例中数组占用的内存共10×4=40字节。此外, 动态初始化数组时,其元素会根据它的数据类型被设置为默认的初始值。常见的数据类型 54 面向对象程序设计———Java编程 默认值如表3-1所示。 表3-1 数据类型默认值 数据类型默 认 值数据类型默 认 值 byte 0 double 0.0D short 0 char 空字符,\' n0000' int 0 boolean false long 0L 引用数据类型null float 0.0F 3.1.3 数组的访问 1.访问数组 在Java中,数组对象有一个length属性,用于表示数组长度,所有类型的数组都是如 此。获取数组长度的语法格式如下: 数组名.length 具体代码如下: int[] list=new int[10]; int size=list.length; 数组中的变量又称为元素,每个元素都有下标(索引),下标从0开始,如在int[]list= newint[10]中,list[0]是第1个元素,list[9]是第10个元素。因此,假如数组list有n个元 素,那么list[0]是第1个元素,而list[n-1]则是最后一个元素。 如果下标值小于0,或者大于或等于数组长度,编译程序不会报任何错误,但运行时出 现异常。ArrayIndexOutOfBoundsException:N 为数组下标越界异常,N 表示试图访问的 数组下标。 2.数组遍历 数组的遍历是指依次访问数组中的每个元素。 【例3-1】 数组遍历实例。 public class TestExample1 { public static void main(String[] args) { int[] i = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for(int j = 0; j = 0; j--) { System.out.print(i[j] +" "); 第3章 数组 55 } } } 【例3-2】 获取数组的最大值和最小值。 public class MaxMinDemo { public static void main(String[] args) { //定义数组 int[] a = {83, 87, 24, 100, 68}; int max = 0; int min = 0; max = min = a[0]; for(int i=1; imax) { max = a[i]; } if(a[i] array[j+1]) { 56 面向对象程序设计———Java编程 //交换元素 int tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; } //System.out.print(array[j]+" "); } //打印每轮排序结果 System.out.print("第"+(i+1)+"轮排序:"); for(int j=0; j