1、概念:
用于存储多个类型相同数据的容器,本质就是一块连续的内存空间。
注意:数组的长度是不可变的,必须在声明的时候指明数组的长度。
2、语法
(1)声明语法
数据类型[] 数组名;
数据类型:可以是基本数据类型也可以是引用数据类型。
数据类型[]:又称之为数组类型。
数组名:就是标识符,要符合标识符命名规则和规范(可以参考变量命名规则)
其他少用声明语法:数据类型 数组名[];
(2)分配空间语法
数组名 = new 数据类型[数组长度];
数组名:数组名要与声明语法中数组名要一致。
new:在堆内存中创建数组空间
数据类型:数据类型要与声明语法中数据类型一致/兼容。
数组长度:数组空间大小,都是由1开始的正数。
public class Demo5_数组 {
public static void main(String[] args) {
//int arr[]; 少用
int[] arr;
//分配空间
arr = new int[1];
//二合一写法,边声明边分配空间
int[] arr2 = new int[3];
}
}
3、使用
数组 | 变量 |
---|---|
声明数组 | 声明变量 |
分配空间 | 变量赋值 |
使用数组 | 使用变量 |
(1)赋值
1)静态赋值
数据类型[] 数组名 = new 数据类型[]{值1,值2,值3,…,值n};
数据类型[] 数组名 = {值1,值2,值3,…,值n}
public class Demo5_数组赋值 {
public static void main(String[] args) {
//int[] arr = new int[]{1, 2, 3};
//int[] arr2 = {1, 2, 3};
//注意1:静态赋值的区别
//第一个静态赋值可以分步完成,先声明,再赋值。
int[] arr;
arr = new int[]{1,2,3};
System.out.println(arr[0]);//1
//第二个静态赋值不可以分步完成,边声明同时赋值。
//int[] arr2;
//arr2 = {1,2,3};
//注意2:没有赋值的数组也有默认值,
//整数类型(byte,short,int,long)默认值是0
//浮点类型(float,double)默认值是0.0
//字符类型(char)默认值是'\u0000'
//布尔类型(boolean)默认值是 false
//引用类型(String,自定义类)默认值是null
int[] arr3 = new int[3];
System.out.println(arr3[0]);//0
}
}
2)动态赋值
数组名[下标] [= 值]
数组名:与已分配空间的数组名一致
下标:数组中存在下标(索引),下标取值由0开始,最大下标是数组长度-1
值:赋的值的类型必须与数组类型一致/兼容
public class Demo7_数组动态赋值 {
public static void main(String[] args) {
int[] arr = new int[3];
//1、输出数组名
System.out.println(arr);//[I@610455d6
/* [I@610455d6
[:代表数组
I:代表数组类型 int
@:分隔符
610455d6:数组的内存空间地址
*/
//2、获取数组中元素的值
//0最小的下标
System.out.println(arr[0]);//0
System.out.println(arr[1]);//0
//2最大的下标
System.out.println(arr[2]);//0
//3、对数组中元素赋值
arr[0] = 10;
System.out.println(arr[0]);//10
//4、遍历数组,访问数组中所有元素
//问题1:循环变量以0开始?循环变量还作为数组下标使用。数组下标由0开始。
//问题2:循环条件是i<arr.length?arr.length用于获取数组长度,因为i代表下标,下标永远等于数组长度,只能小于它。
//问题3:循环变量迭代部分是i++?访问下一个元素需要将下标+1
System.out.println("数组长度:"+arr.length);//3
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}