引用数据类型-数组

引用数据类型包含类、接口和数组类型,还有一种特殊的null类型。这里我们讲讲数组。

数组的声明

一个数组只能存储一种类型的数据,如int型数组只能存int型数据。

数组是一种引用数据类型,如int是基本数据类型,但int[ ]就是引用数据类型了。

在定义数组三要素:变量类型,数组名,数组长度。

Java中声明一个数组的方式有两种:

1.  type[ ] arrayName
2. type arrayName[ ]

如:int [ ] intArr,int intArr[ ]。


数组的初始化

在使用数组之前需要进行初始化,不然会报空指针异常。

“初始化”,其实听起来高大上,简单理解起来就是“第一次赋值”的意思。也就是我们不光需要声明一个数组,还要告诉计算机我们这个数组里面都存了什么值。初始化一个数组的方式有如下两种:

1.静态初始化:由程序员显式指定每个数组元素的值,由系统决定数组长度。

方法有两种,如下:

①arrayName = new type[ ] (元素1,元素2,元素3……)

实例如下:

public static void main(String[] args) {
int []arry;
arry = new int[] {1,5,7,8,9};
}

即声明了一个包含5个元素:1,5,7,8,9的int型数组。

②简化的静态初始化方法,直接将数组定义和初始化在一行代码里完成:

int []arry={1,5,7,8,9};

以上两种方式都是可以的。

2.动态初始化:初始化时,程序员只指定数组长度,由系统为数组元素分配初值。

语法为:arrayName = new type[length];

//同时完成数组的定义和初始化,使用动态初始化语法:
int[] prices=new int[5];
//初始化数组时元素的类型是定义数组时元素类型的子类:
Object[] names=new String[5];

完成上述初始化之后,系统会为数组元素赋上一个初始值,规则如下:

数组元素的类型为byte short int long时,初始化后数组元素值为 0;
数组元素的类型为float double时,初始化后数组元素值为0.0;
数组元素的类型为boolean时,初始化后数组元素值为false;
数组元素的类型为char时,初始化后数组元素值为\u0000;
数组元素的类型为引用数据类型(类,接口和数组)时,初始化后数组元素值为null。

此时如果把数组内容都打印出来,就全部都是初始化之后的元素值。


使用规则:

如果在创建数组的时候,知道数组中应该存储什么数据,则采用静态初始化方法。

如果在创建数组的时候,无法预测到数组中存储什么元素,只实现开辟空间,则使用动态初始化。


数组基本操作·访问数组

数组最常用的操作就是访问数组,包括对数组元素赋值,和取出数组元素的值。

我们通过在[ ]中写入数字来表示我们要访问的是数组的第几个元素,这个数字就叫做索引。Java语言的数组索引是从0开始的,也就是第一个数组元素的索引值为0,最后一个元素的索引值为数组长度(array.length)-1。

示例代码如下:

public class Test {
public static void main(String[] args) {
Object[] names=new String[5];//声明一个数组并初始化
System.out.println(names[1]);
names[4]="Sports";
System.out.println(names[4]); //打印赋值后的最后一个元素
}
}

上述代码中我们的数组下标最大为4,如果写成5,则会发生数组越界,代码运行时将出现异常:

public class Test {
public static void main(String[] args) {
Object[] names=new String[5];//声明一个数组并初始化
System.out.println(names[1]);
names[5]="Sports";
System.out.println(names[5]);
}
}

打印数组

数组提供了一个length属性,可以获取数组长度,从而通过循环来遍历数组的每个数组元素:

public class Test {
public static void main(String[] args) {
Object[] names=new String[5];//声明一个数组并初始化
names[0]="小明";
names[1]="小胡";
names[2]="小田";
names[3]="小刚";
names[4]="铁柱";
for(int i=0;i<names.length;i++) {
System.out.println(names[i]);
//请思考这里面的names.length的值为多少?
}
}
}

二维数组

Java中所谓的二维数组,其实就是一个一维数组,只不过里面的元素都不是整数,字符串啥的,而是数组而已。

声明一个二维数组,有如下两种方式:

(其实和一维数组一样,方括号的位置也可以在arrayName之前或之后)

String ar1[]= {"第一个","二维"};
String ar2[] = {"数","组"};
String arr[][] = {ar1,ar2};//先声明两个一维数组,然后把一维数组作为数组元素添加到数组arr[][]中。

String[][] arr1 = {{"第一个","二维"},{"数","组"}};

打印一个二维数组,则需要使用如下的嵌套循环方式:

for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr[i].length;j++)
System.out.print(arr[i][j]);
if(i==arr.length-1) {
System.out.print("\n");
}
}

使用两个循环控制变量i和j,按顺序先打印二维数组中第一个一维数组中的所有元素,再打印第二个一维数组中的所有元素……