当前位置:课程学习>>第五章 常用类>>文本学习>>知识点一


知识点一  数组




一、一维数组

在Java中数组是一种引用类型 ,数组是由若干个相同数据类型的元素构成的集合,数组中的元素类型可以是基本数据类型,也可以是引用类型。数组中的元素有先后顺序,在使用时就用数组名和在数组中的顺序位置来表示数组中不同的元素。

1. 声明数组

数组的声明主要是声明数组的名称和数组元素的数据类型,格式为:

       数据类型 数组名[ ]; 如 int a[];

        数据类型[] 数组名; 如 int [] a;

这两种形式都可以,没有本质的区别。数组在声明后系统没有为其分配任何内存空间,因此不能进行赋值和引用等操作。要想使用数组必须对它进行创建空间并进行初始化。

2.创建空间并初始化

数组在声明后必须经过初始化才可以使用,分为静态初始化和动态初始化两种。

静态初始化:在声明数组的同时对元素进行赋以初始值,此时可以省略new操作符。如:int [] a={1,2,3,4,5,6};这样就创建了一个整型数组a,长度为6,元素为1,2,3,4,5,6。

动态初始化:使用new运算符为数组分配内存空间。若是基本数据类型的数组,格式为:

    数组名 = new 类型[长度]; 如:a=new int[10];

此时系统会为该数组分配指定大小的内存空间而且把该类型的默认值赋给每个元素,对于数组a来说,系统分配给它10个整型大小的内存空间,每个元素的默认值为0。

如果数组中的元素是引用类型,如其他类的对象,此时初始化需要经过两步初始化操作,首先指定数组长度,格式为:数组名 = new 类名[长度];然后对每个元素都要进行对象的创建,否则每个元素都是空(null),初始化的格式和创建对象一样,格式为:数组名[下标]=new 类名([参数列表])。

3.数组的引用

引用数组中的元素需要使用数组名和元素在数组中的位置,其格式为:数组名[下标],下标从0开始,直到数组长度减1。

在数组中都有一个length成员,用于存放数组的长度,因此可以使用它来控制数组的下标,避免在使用数组时出现下标越界。

【例5.1】一维数组的创建和使用。

1 //ArrayTest.java

2 class ClassTest

3 {

4    int c=1;

5 }

6    public class ArrayTest

7    {

8       public static void main(String[] args)

9       {

10       int a[]=new int[5];

11       ClassTest ct[]=new ClassTest[5];

12       for(int i=0;i<5;i++)

13       {

14          System.out.print("a["+i+"]="+a[i]);

15          System.out.print(" ct["+i+"]="+ct[i]);

16          System.out.println();

17       }

18       System.out.println(ct[0].c);

19       for(int i=0;i<ct.length;i++)

20       {

21          ct[i]=new ClassTest();

22          System.out.println("ct["+i+"]="+ct[i]);

23       }

24          System.out.println(ct[0].c);

25    }

26 }

程序中首先声明创建了两个数组a和ct,其中a为整型数组,而ct为ClassTest类。然后输出数组中的每个元素,由于a为整型类型,所以会输出0(默认值),而ct中的元素由于没有初始化,都为null,因此更不能访问它的成员了,所以程序在运行时会出现空引用异常的问题,如图5.1所示。

1
图5.1 未初始化数组元素在访问时出现的异常

如果把第18行注释掉,那么程序就能正常运行,其结果如图5.2所示。

2
图5.2 程序的运行结果

二、多维数组

在Java中也可以使用多维数组,最为常用的就是二维数组了,创建多维数组和创建一维数组一样,需要声明数组然后进行初始化。声明一个二维数组的格式为:

    数据类型 数组名[ ][ ]; 或 数据类型 [ ][ ] 数组名;

初始化时也有静态初始化和动态初始化两种方式,静态初始化是在声明的时候直接赋值。如

    int a[][]={{1,2},{3,4},{5,6},{7,8}}; //4行2列的二维数组

动态初始化:使用new运算符,一种是直接指定数组的大小,如:int [][] a=new int[2][3];另外一种是分别指定大小,首先要指定最高维的大小。如:int[][] a=new int [2][];然后再分别指定其他维的大小,如 a[0]=new int[3]; a[1]=new int[3];但是不允许像如下的初始化:int [ ][ ] a=new int[ ][3];

多维数组的引用也是通过数组名和元素的下标来实现的,如二维数组,格式为:数组名[下标1][下标2];

Java中还支持不等维的多维数组,如

    int [ ][ ] a=new int[3][ ]; a[0]=new int[2]; a[1]=new int[3]; a[2]=new int[4];

不过访问不等维数组中的元素必须借助于length成员,否则很容易出现下标越界的异常。

【例5.2】多维数组的创建和使用。

1 //MultiArrayTest.java

2 class ClassTest

3 {

4    int c=1;

5 }

6 public class MultiArrayTest

7 {

8    public static void main(String[] args)

9    {

10       int i,j;

11       int a[][]={{1,2},{3,4,5},{6,7,8,9}};

12       System.out.println(a.length);

13       System.out.println(a[0].length);

14       System.out.println(a[1].length);

15       System.out.println(a[2].length);

16       for(i=0;i<a.length;i++)

17       {

18          for(j=0;j<a[i].length;j++)

19             System.out.print(" a["+i+"]["+j+"]="+a[i][j]);

20          System.out.println();

21       }

22       ClassTest ct[][]=new ClassTest[2][3];

23       for(i=0;i<ct.length;i++)

24       {

25          for(j=0;j<ct[i].length;j++)

26             ct[i][j]=new ClassTest();

27       }

28       System.out.println(ct[0][2].c);

29    }

30 };

注意多维数组中length成员的使用(注意第12行~第15行的输出结果),程序的输出结果如图5.3所示。

3
图5.3 程序的输出结果

 

进入知识点二学习