数组
数组:是同一类型(基本数据类型或引用数据类型)变量的有限有序集合。在Java语言中,数组本身也是一个对象。
数组中的每一个变量被称为数组元素,所有数组元素使用相同的数组名,使用下标唯一标识。数组下标的个数就是数组的维数。
根据数组下标的个数,数组分为一维数组、二维数组和多维数组。
在Java语言中,数组与其他基本类型的变量一样,也要遵循“先声明、后使用”的原则。
数组的声明
一维数组声明:
数据类型 数组名[ ];
数据类型[ ] 数组名;
二维数组声明:
数据类型数组名[ ][ ];
数据类型[ ][ ] 数组名;
数组的类型,可以是基本数据类型或引用数据类型。
无需指明数组元素的个数,即方括号中无数字,也不为数组元素分配内存空间。
数组必须经过初始化分配内存后才能使用。
例如(正确的数组声明):
int age[];
int[] age;
int score[][];
float[][] salary;
class Point{…}
Point p[];
Point[] p;
数组的初始化
数组的初始化分为静态初始化和动态初始化
静态初始化的语法格式:
数据类型[] 数组名={值1,值2,…,值n};
声明与初始化必须在同一条语句中完成。
例如:
char[] c={'a','b','c','d','e'};
int a[]={1,2,3,4,5};
int score[][]={{1,2,3},{4,5,6}};
int grade[][]={{1,2},{4,5,6}};
动态初始化数组的语法格式:
创建一维数组: 数组名=new 数组元素类型[数组元素个数];
动态初始化时的数组元素类型需与声明数组时保持一致。
元素个数,即数组长度可以是常量,也可以是变量。
例如:
char s[];
s=new char[20];
char s[];
int n=20;
s=new char[n];
例如:
int age[];
age=new int[5];
也可以直接写成如下形式:
int age[]=new int[5];
创建二维数组: 数组名=new 数据类型[数组长度][数组长度];
int score[][]=new int[2][3];
int score[][]=new int[2][];
score[0]=new int[3];
score[1]=new int[3];
声明和初始化可以分在2条语句中完成,也可以在一条语句中完成。
char s[];
s=new char[20];
char s1[]=new char[20];
char[] s2=new char[20];
使用动态初始化数组后,数组中的每一元素都被自动分配默认值:
数据类型 | 默认初值 |
---|---|
整型(byte/short/int/long) | 0 |
浮点型(float/double) | 0.0 |
字符型(char) | ‘\u0000‘(空字符) |
布尔型(boolean) | false |
引用数据类型 | null(空值) |
如果已知数组的所有元素的值,也可使用如下格式完成动态初始化:数组名=new 数组元素类型[]{值1,值2,…,值n};
int age[];
age=new int[]{10,15,20,18,30};
- 基本类型数组的每个元素都是一个基本类型的变量。
- 引用类型数组的每个元素都是对象的引用。
- 可以根据需要声明和创建对象数组,也就是数组中存储的数据的数据类型是自定义的类,则数组的定义和创建格式可以采用以下两种格式:
类名 数组名[]=new 类名[数组元素的个数];
类名[] 数组名=new 类名[数组元素的个数];
数组元素的使用
数组元素的使用与变量的使用方法相同。
使用数组元素的格式:数组名[非负整数下标值]
例如:
a[0]=25;
score[0][0]=71;
a[0]=a[0]+25;
a[0]=a[0]+a[1];
a[0]=a[1]=25;
- 下标必须总是从0开始
- 下标越界异常:任何访问在上述界限之外的数组元素的企图都会引起运行时出错。
- 每个数组都有一个length属性,其值是数组的长度,即数组含有元素的个数(length可以是正数或零),也就是通过关键字new分配的内存块数,因此,下标值最大为length-1。
- 对于二维数组,length属性的值是数组的行数。
数组的length属性:
public class Test {
public static void main(String[] args) {
int a[]=new int[5];
System.out.println("a数组的长度是:"+a.length);
int score[][]=new int [2][3];
System.out.println("score数组的行数是:"+score.length);
System.out.println("score数组的列数是:"+score[0].length);
}
}
数组举例:
public class Test {
public static void main(String[] args) {
int a[]={1,2,3,4,5};
int b[]=new int[5];
int c[]=new int[3];
b=a;
c=a;
for(int i=0;i<5;i++)
System.out.print(a[i]);
System.out.print('\n');
for(int i=0;i<5;i++)
System.out.print(b[i]);
System.out.print('\n');
for(int i=0;i<5;i++)
System.out.print(c[i]);
System.out.print('\n');
}
}
数组元素的拷贝可以使用System类的arraycopy方法或Arrays类的copyOf()方法
Java数组名是一个引用,当将一个数组名赋值给另一个数组名时,实际上是名字的复制,此时指向同一地址单元。