1.什么是数组
数组(array)是一种用于存储多个相同类型数据的存储模型
2.数组定义格式
第一种:数据类型[] 数组名
示例:
int[] arr;
double[] arr;
char[] arr;
第二种:数据类型 数组名[]
示例:
int arr[];
double arr[];
char arr[];
3.数组初始化
3.1概述:Java中的数组必须先初始化,然后才能使用。所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值
3.2动态初始化
初始化时只指定数组长度,由系统为数组分配初始值
格式:数据类型 [ ] 变量名 = new 数据类型[数组长度];
范例: int [ ] arr = new int[3];
3.3静态初始化
初始化时指定每个数组元素的初始值,由系统决定数组长度
格式:数据类型 [ ] 变量名 = new 数据类型[ ] { 数据1 ,数据2 ,数据3 ,……} ;
范例: int [ ] arr = new int[ ] { 1, 2 , 3 } ;
简化格式:数据类型 [ ] 变量名 = { 数据1 ,数据2 ,数据3 ,……} ;
范例: int [ ] arr = { 1, 2 , 3 } ;
3.4数组元素访问
什么是索引?
每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。
这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
索引是数组中数据的编号方式
作用:索引用于访问数组中的数据使用,数组名[索引]等同于变量名,是一种特殊的变量名
特征①:索引从0开始
特征②:索引是连续的
特征③:索引逐一增加,每次加1
访问数组元素格式:数组名[索引];
示例:
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[3];
//输出数组名
System.out.println(arr); //[I@880ec60(地址)
//输出数组中的元素
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
4.Java中的内存分配
栈内存:存储局部变量
定义在方法中的变量,例如:arr
使用完毕,立即消失
堆内存:存储new出来的内容(实体,对象)
数组在初始化时,会为存储空间添加默认值
整数:0
浮点数:0.0
布尔:false
字符:空字符
引用数据类型:null
每一个new出来的东西都有一个地址值
使用完毕,会在垃圾回收器空闲时被回收
5.数组操作的两个常见小问题
5.1索引越界异常(ArrayIndexOutOfBoundsException)
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr[3]);
}
}
数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。
程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
解决方案
将错误的索引修改为正确的索引范围即可!
5.2空指针异常(NullPointerException)
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[3];
//把null赋值给数组
arr = null;
System.out.println(arr[0]);
}
}
arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
解决方案
给数组一个真正的堆内存空间引用即可!
6.数组的输出
- for循环遍历输出
- 直接以数组名输出(只有char型数组可以输出内容,其他类型的输出的是内存地址)
public static void main(String[] args) {
int[] arr = new int[]{1,4,7};
char[] brr = new char[]{'1','2','3'};
String[] crr = new String[]{"1","2","3"};
System.out.println(arr);
System.out.println(brr);
System.out.println(crr);
}
结果图:
- 以Arrays.toString(数组名)输出(带格式输出)
public static void main(String[] args) {
int[] arr = new int[]{1,4,7};
System.out.println(Arrays.toString(arr));
}
结果图:
- 如果想打印多维数组可以使用Arrays.deepToString方法
public static void main(String[] args) {
int[][][] arr = new int[3][3][3];
System.out.println(Arrays.deepToString(arr));
}
结果图: