第一部分:数组的定义和方向
1.1、容器
//定义了一个int变量num,并初始化
//一个变量num,只能存储一个数据
int num = 10;
System.out.println(num);
// 新的数据进来,赋值给了num,原来的数据将被替换
num = 20;
System.println(num);// 20
--> 变量中只能存储一个数据。新的数据进来之后,老的数据将被替换
如果需要存储多个数据的话,我们需要使用容器
容器的概念:
容器:是将多个数据存储到一起,每个数据我们都称之为元素
1.2 数组变量的定义
1.数组变量定义格式一:
数据类型[]数组名称; ----建议使用----
2.数组变量定义格式二:
数组类型 数组名称[];
1.3 数组的第一种初始化方式
数组的第一种初始化方式(动态的初始化:指定数组的长度)
1.格式:
数据类型[] 数组名称 = new 数据类型[长度];
int [] array = new int[5] //[5]代表的时长度
2.格式解释:
(1)左侧数据类型:规定了数组中可以存储哪种数据的数据
(2)左侧[]:表示数组的意思
(3)数组名称:就是给数组起个名字(相当于门牌号),方便找到并使用数组
(4)=:赋值的意思,把=右侧new出来的数组容器,存储到=左边的数组名称中
但是存储的是数组在内存空间中的地址值
(5)new: 创建数组容器的过程
(6)右侧数据类型:和左侧保持一致,开辟连的同类型的空间
(7)右侧[]中的长度:是一个int类型的数字,表示数组中可以存储数据的数量,
也叫做数组长度
1.5 数组的第三种初始化方式
数组的第三种初始化方式(简化版静态初始化:指定数组中的每个元素)
1、格式:
数据类型[] 数组名称 = {元素1、元素2、元素3、... ...元素n};
2、注意:
(1)右侧不用写长度,JVM会根据{}中数组的元素数量推导出长度
(2)虽然没有写new,底层仍然有new的过程
(3)动态初始化和标准格式的静态初始化,可以分为两步完成
(4)简化版静态初始化,不能分成两步完成
int[] array1;
array1 = new int[5];
int[] array2;
array2 = new int[]{10,20,30};
int[] array3;
array3 ={100,200,300}; // 这是错误的,简化版静态初始化,不能分成两步完成
第二部分: 数组操作的常见问题
3.1 数组越界异常
数组操作的常见问题一:
数组索引越界(超出了范围)异常
1.问题描述: java.lang.ArrayIndexOutOfBoundsException类
数组索引越界异常
2.产生的原因:
使用索引编号范围数组元素时,给出的索引编号不存在(超出了范围)
索引编号范围:最小值:0,最大值时数组长度 减1
3.解决方案:
根据控制台的打印信息,找到出现问题的索引,进行修改
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
Index 5 out of bounds for length 3
at com.donglan.demo.Demo08ArayProblem.main(Demo08ArayProblem.java:15)
3.2 数组空指针异常
数组操作的异常问题二:
空指针异常
1.问题描述:java.lang.NullPointerException
2.产生的原因:
null是一个引用类型的常量,可以给任意类型引用变量赋值
当把null赋值给数组变量one后,数组变量one将不再指向堆内存空间的任何数组
也就不可以通过one再访问数组元素,只要访问了,就会报出空指针异常
3.解决方案:
(1)不要通过值为null的数组变量,访问数组元素
(2)根据控制台的打印信息,找到数组变量时null的地方进行修改
让数组变量指向一个堆内存空间的数组,就可以正常访问数组的元素了