//个人觉得重点的部分会用不同颜色标出
-
数组的定义和访问
如果需要定义多个变量,那么我们建议使用容器,一次性保存多个数据,统一操作
1.容器:是将多个数据存储到一起,每个数据称为该容器的元素。
2.Java中容器: 数组,集合
数组:是一个长度固定的容器,而且容器中的元素的数据类型要一致
3.数组的定义
格式一: 指定数组的长度,每个元素由系统赋默认值
数据类型[] 数组名 = new 数据类型[长度];
格式说明:
数据类型: 代表数据中元素的类型
[]:数组的特殊定义格式
数组名: 程序员自定义的标识符
new : 固定格式,表示创建一个新的数组
长度: 是指这个数组中一共有多少个元素
这种方式,由于只是指定了长度,没有给每个元素赋值,那么每个元素都有默认值
默认值和数据类型有关系:
byte short int long 默认值是0
float double 默认值0.0
char 默认值 ' '
boolean 默认值 false
引用类型的默认值是 null
格式二:指定数组中每个元素的值,长度系统自动计算
数据类型[] 数组名 = new 数据类型[]{值1,值2,值3,值4....};
格式三:格式二的简洁版本
数据类型[] 数组名 = {值1,值2,值3,值4....};
以上这种格式专业称为"语法糖",语法糖只是格式简化,底层的原理是不变的
4.数组元素的访问
要想访问数组的元素,那么必须用到数组的索引/下标/角标(index)
本质就是数组的中元素的编号, 索引是从0开始的
格式:
System.out.println(数组名[索引])
数组名[索引] = 值;
比如:
//1.定义一个数组
int[] nums = new int[4];
//2.访问数组的元素
System.out.println(nums[0]);
System.out.println(nums[1]);
System.out.println(nums[2]);
System.out.println(nums[3]);
//3.也可以修改元素的值
nums[0] = 10;
nums[1] = 100;
nums[2] = 1000;
nums[3] = 10000;
System.out.println("=================");
//4.重写打印
System.out.println(nums[0]);
System.out.println(nums[1]);
System.out.println(nums[2]);
System.out.println(nums[3]);
5.数组的长度属性
长度属性: 就是数组中元素的个数
格式:
int 长度 = 数组名.length; 获取了数组的长度
比如:
//1.定义一个数组
int[] arr = {1,2,3,4,5,235,345,34,53,10};
//2.获取数组的长度
System.out.println(arr.length);
//特别注意:数组的长度属性,只能取值,不能赋值
-
数组原理内存图
1.什么是内存
程序运行时,所占的那部分空间,断电丢失
2.Java的内存五大区
栈区(stack): 保存局部变量(我们目前学的所有变量,都在这个区)
堆区(heap): 保存对象(俗称new出来东西)
方法区(method area): 保存.class文件
本地方法区(native) : 和操作系统有关
程序计数器区 : 和CPU相关
数组的常见错误
1.数组越界异常(ArrayIndexOutOfBoundsException)
访问了不存在的索引的元素
比如:
//1.定义一个数组
int[] nums = {10,20,30};
//2.访问元素
System.out.println(nums[0]);
System.out.println(nums[1]);
System.out.println(nums[2]);
//3.访问了不存在的索引
System.out.println(nums[3]);//此处出异常了,ArrayIndexOutOfBoundsException
2.空指针异常(NullPointerException)
数组名中的地址清空后,继续访问数组的某个元素
比如
//1.定义一个数组
int[] nums = {10,20,30,40};
//2.nums中保存的是首地址
System.out.println(nums);
//3.清空nums中地址
nums = null;
//4.那么nums中已经没有地址了
System.out.println(nums[0]);//此处出异常了,NullPointerException
-
数组的常见算法
1.数组遍历【重点】******************
遍历: 取出数组中的每个元素
遍历的标准代码:
//1.定义一个数组
int[] nums = {10,20,30,40,50,60,70,80,90};
//2.3 使用循环 产生 0-(数组长度-1)
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
倒序遍历
for (int i = nums.length-1;i >= 0;i--) {
System.out.println(nums[i]);
}
2.数组获取最大值元素
求出数组中最大的那个元素
//1.数组
int[] nums = {32,54,3,754,6,13,4,53,6,34,645,7,568};
//2.求数组的最大值
//定义一个擂主变量
int max = nums[0];
//依次取出每个元素(遍历),不要第一个
for(int i = 1;i < nums.length;i++) {
//选手元素 nums[i]
if (max < nums[i]) {
max = nums[i]; //选手 大于 擂主 那么选手要成为新的擂主
}
}
//所有元素都比较完毕之后,max中保存的就是最大值
//3.打印
System.out.println("最大值是:"+max);
如果想求数组的最小值只要修改判断语句中"<"变为">"即可,建议把变量名max改为min
3.数组反转(不能定义别的数组)
源数组: 1 2 3 4 5
反 转: 5 4 3 2 1
//1.定义数组
int[] nums = {10,20,30,40,50,60,70,80};
//2.反转数组
//两个指针(索引)
int min = 0;
int max = nums.length - 1;
//循环
while (min < max) {
//交换
//nums[min] 和 nums[max]
//中间变量
int temp = nums[max];
nums[max] = nums[min];
nums[min] = temp;
//自增和自减
min++;
max--;
}
//3.打印数组
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}