JAVA 基础语法(五)——数组

数组

我们编码中面临的问题

首先我们来看一个问题,如果我要录入学生的成绩,是不是要定义一个变量分数score,那我班有50个学生,是不是要定义50个变量呢?那我要录入我们一个年级的全部学生的成绩,是不是要把全部学生的成绩都要定义成一个个单独的变量呢?显然写这么大量重复的代码是没有意义的!如何解决这个问题,Java语言提供了一个简单的数据结构——数组(array)。我们这章主要介绍几本类型数组。


1)什么是数组?

概念

概念:数组是同一种数据类型的元素组成的集合
其实数组就是一个容器。我们想要对某些数据进行处理,首先就要想到怎么存储这些数据。就像上面这个关于成绩的问题,我们没必要把每个学生的分数都定义成一个变量,可以直接定义一个分数的数组,然后让数组里面的每一个元素都代表了每一个学生的分数。

注意:数组可以装任意类型的数据,但是定义好的数组只能装同一种数据类型的元素, 也就是数组一旦定义,那么里面存储的数据类型也就确定了。

数组的好处?

存数据和不存数据有什么区别吗?数组的最大好处就是能都给存储进来的元素自动进行编号,方便操作这些数据。 注意编号是从0开始


2)数组的定义

a)语法

元素类型[] 数组名 = new 元素类型[大小];
示例:

    int[] arr = new int[5];

a) 大小 代表的是数组中元素个数或数组长度,就像这个 5 ,即为数组中元素的个数,也称为数组长度。
b)int[]为数组类型,代表定义了一个int类型的数组,它里面的每一个元素都只能是int类型;
c)arr称为数组类型变量(引用),就像变量名一样,但是数组是一个引用类型,而不是我们学过的基本数据类型,所以arr可以说是数组的名字,也可以说是一个引用类型变量(简称引用),
new为特定的声明引用类型的关键字, 正是因为new语句,才使得数组分配到了指定大小的空间(后面详细讲解,先记住)。

b)定义实质

定义数组的过程其实是两个步骤,例如:
int [] arr;
arr=new int[5];

①数组的声明

数组声明的方式有两种:

    元素类型 [] 数组名;
    元素类型  数组名[];

例如:int []arr 和int arr []两种写法均可,但是常用int [] arr。

②给数组分配空间

声明数组时并不规定数组长度,可以看到声明时仅指定了类型 int [],并未指定长度,那是因为这时候还没有给它分配空间,而用new关键字分配空间时则需指定分配的空间大小,如new int[5]。

注意:给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小。创建数组之后数组的长度是不能修改的可以使用length 属性获取数组的大小


3)数组的初始化

我们刚才定义了长度为5的int型数组,但是你知道这5个元素的值是什么吗?你不知道,但是我知道啊~
基本类型 的数组创建后,JVM会默认为其数组元素设置了初始值(默认值),元素的初始值如下所示:
byte、short、char、int、long为0;
float和double为0.0;
boolean为false。

注意,此处强调的是基本类型数组的默认值,后期会介绍数据元素为非基本类型的,它的默认初始值与基本类型不同。

而我们既然要用到数组,那肯定不会用到它的默认值,所以很多时候我们会手动设置初始值,也就是数组的初始化。
a)不使用关键字new

int [ ] arr = { 10,23,30,-15,21 } ; 

这种方式,元素的个数即为数组的长度。但是这种写法只能用于声明时的初始化,不能用于先声明后赋值的情况,例如,下面的代码会有编译错误:

int []arr;
arr= { 10,23,30,-15,21 };//报错   

b)分配空间时以元素的个数作为数组的长度

int[] arr = new int[]{ 10,23,30,-10,21 };

c)定义好之后,重新给数组的每一个元素赋值

int []arr=new int[5];
arr[0]=10;//用下标来表示数组中的第几个元素,从0开始,下面会详细讲到
arr[1]=23;
arr[2]=30;
arr[3]=-15;
arr[4]=21;

这种方式已经不算是初始化,但是是我们比较常用的赋值方式


4)数组的访问

a)获取数组的长度

调用数组的length属性可以获取数组的长度
代码示例:

    int[] arr = new int[]{10,23,30,-10,21};
    System.out.println(arr.length);//输出数组长度  5

b)通过下标访问数组中的元素

通过数组的下标可以访问到数组的每一个元素,下标从0开始,最大到length-1,超出下标范围会报数组下标异常。

因为下标从0开始,所以数组下标最大值肯定是它的长度减 1 ,例如:
int [] arr=new int[5];
则下标最大是arr.length-1 ==>5-1==>4
代码示例:

int[] arr = new int[]{10,23,30,-10,21};
System.out.println(arr[0]);//  10 
System.out.println(arr[arr.length-1]);//21 

上例中,arr[arr.length-1] 数组下标为该数组的长度减1,说明是数组中的最后一个元素,也就是21

c) 遍历数组元素

遍历数组也就是依次对数组中的每一个元素进行访问,对数组整体进行操作。通常会使用for循环语句,将数组元素的下标作为循环变量,即可访问数组中的每一个元素。
代码示例:

    int arr=new arr[5];
    for(int i=0;i<arr.length;i++){
        arr[i]=10;//给数组中的每一个元素都赋值为10
    }

上面代码中用循环,i 的值是从0到 length-1 ,刚好是数组元素的下标范围之内,下面我们再讲上面代码中的数组元素遍历输出看一下:

//接上面代码
for(int i=0;i<arr.length;i++){
    System.out.println("数组的第"+(i+1)+"个元素是:"+arr[i]);
}

结果是:

数组的第1个元素是10
数组的第2个元素是10
数组的第3个元素是10
数组的第4个元素是10
数组的第5个元素是10

说明我们刚才遍历数组插入元素是成功的。


5)数组的常见异常

数组中最常见的问题:

1. NullPointerException 空指针异常

原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。

代码按例:

int [] arr;
int x=arr.length;

上例中虽然数组arr已经声明,但是并没有给这个数组分配空间(没有new),也就是这个引用没有指向的地址。

2. ArrayIndexOutOfBoundsException 索引值越界。

原因:访问了不存在的索引值。

案例:

int[] x = { 1, 2, 3 };
System.out.println(x[3]);
//java.lang.ArrayIndexOutOfBoundsException

上例中数组下标越界异常,注意:数组的下标从0开始。

猜你喜欢

转载自blog.csdn.net/qq_34598667/article/details/72901924