活动地址:CSDN21天学习挑战赛
目录
什么是数组
数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。
String[] str = {"aaa","bbb","ccc"};
int[] ints = {111,222,333};
char[] chars = {'a','b','c'};
String str1 = "aaa";
String str2 = "bbb";
String str3 = "ccc";
int i1 = 111;
int i2 = 222;
int i3 = 333;
和正常对一种类型变量创建赋值来说,数组要比单个操作要方便快捷很多。
数组的定义
静态初始化数组
//完整格式
//数据类型[] 数组名 = new 数据类型[]{元素1,元素2 ,元素3… };
double[] scores = new double[]{89.9, 99.5, 59.5, 88.0};
int[] ages = new int[]{12, 24, 36}
//简化格式
//数据类型[] 数组名 = { 元素1,元素2 ,元素3,… };
int[] ages = {12, 24, 36};
注意:数组变量名中存储的是数组在内存中的地址,数组是引用类型。
数组的使用
数组是有序的,可以根据索引来操作数组里面的数据。数组索引是从0开始的,也就是说以上的数组ages[0]=12。
//取值
System.out.println(arr[0]); // 12
//赋值
arr[2] = 100;
System.out.println(arr[2]); // 100
//数组可以使用 '数组名'.length ,可以查看数组长度
System.out.println(arr.length); // 3
上面可以根据 '数组名'.[索引值]来获取当点索引的这个变量,并且可以对他进行一系列的操作,可以根据length来获取数组的长度。因为索引从0开始,所以数组的最大索引则是数组长度-1,也就是length-1
注意事项
数组定义可以“数据类型[] 数组名”这样写,也可以写成 “数据类型 数组名[] ”这样写。
数组类型一旦定义,什么类型的数组存放什么类型的数据,否则报错。
数组被创建出来,长度就是刚创建出来的长度并且不能改变。
动态数组定义
定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据
//数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3];
// 后赋值
arr[0] = 10;
System.out.println(arr[0]); // 10
byte、short、int 、char、long类型数组元素的默认值都是0
float、double类型数组元素的默认值都是0.0
boolean类型数组元素的默认值是false、String类型数组元素的默认值是null
数组遍历
数组遍历就是指一个一个数据的访问。搜索、数据统计等等都需要用到遍历。
int[] ages = {20, 30, 40, 50};
for (int i = 0; i < ages.length; i++) {
System.out.println(ages[i]);
}
//输出
20
30
40
50
数组基本操作
我们根据数组的遍历,可以对数据进行些简单的操作
例如:int数组求和
int[] money = {16, 26, 36, 6, 100};
int sum = 0;
for (int i = 0; i < money.length; i++) {
// i = 0 1 2 3 4
sum += money[i];
}
System.out.printf(sum);//184
求最大值
int[] faceScores = {15, 9000, 10000, 20000, 9500, -5};
int max = 0;
for (int i = 0; i < faceScores.length; i++) {
if(faceScores[i] > max) {
// 替换
max = faceScores[i];
}
}
数组的内存图
我们创建一个方法,字节码文件加载时进入内存的方法区
变量在栈内存,new出来的对象在堆内存,并开辟空间,产生地址
有时候存在两数组变量指向一个对象的时候
例如:int[] 数组= {11, 22, 33}; int[] 数组1 = 数组;
数组使用常见问题
问题1:如果访问的元素位置超过最大索引,执行时会出现ArrayIndexOutOfBoundsException(数组索引越界异常)
问题2:如果数组变量中没有存储数组的地址,而是null, 在访问数组信息时会出现NullPointerException(空指针异常)
int[] arr = new int[]{11, 22, 33};
System.out.println(arr[2]);
// System.out.println(arr[3]) //出现异常ArrayIndexOutOfBoundsException
//数组越界
arr = null;
System.out.println(arr); // null
// System.out.println(arr.length) //出现异常NullPointerException
//数组空指针
debug的使用
Debug工具
IDEA自带的断点调试(排错)工具,可以控制代码从断点开始一行一行的执行,然后详细观看程序执行的情况。
① 在需要控制的代码行左侧,点击一下,形成断点
② 选择使用Debug方式启动程序,启动后程序会在断点暂停
③ 控制代码一行一行的往下执行