数组
引入:容器的概念
容器:可以保存多个数据的东西
1.数组概述
a.什么是数组
数组就是一种容器
b.数组的特点:
a.保存的数据的数据类型必须是一致
b.数组的长度是固定的!!!
元素:数组中的数据,一般我们专业成为元素
2.数组的定义格式
a.定义格式1: 我们指定数组的长度,数组中元素的值由系统赋默认值
数据类型[] 数组名 = new 数据类型[长度];
b.详细介绍
i.数据类型: 数组中每个元素的类型
ii.[]: 代表数组
iii.数组名: 我们程序员给数组起的名字(标识符)
iv.new :固定,代表创建一个新的数组
v.长度: 指的是数组中元素的个数
举例:定义一个数组,保存我们每个人的考试成绩
double[] scores = new double[69];
举例:定义一个数组,保存我们每个人的年龄
int[] scores = new int[69];
[系统默认值和数据类型有关]
整数类型: 默认值就是0
浮点数类型: 默认值就是0.0
字符类型: 默认值是空格
布尔类型: false
引用类型: null
c.定义格式2: 我们指定数组每个元素的值,长度由系统自己计算
数据类型[] 数组名 = new int[]{值1,值2,值3,…..};
举例: 定义数组,保存1-10
int[] nums = new int[]{1,2,3,4,5,6,7,8,9,10};
这种定义方法不允许指定长度,哪怕是对的,编译也会报错
d.定义格式3: 语法糖,格式更加简洁,但是底层原理还是和定义格式2一样
数据类型[] 数组名 = {值1,值2,值3,…..};
举例:定义数组,保存 5个1-10的随机数
int[] nums = {3,5,7,9,1};
3.通过索引访问数组的元素
a.什么是索引
数组中的每个元素都有一个编号,这个编号专业成为索引(下标,角标,英文名Index)
注意:index是从0开始的
比如: 有一个int[] 数组名的长度为10的数组
那么最后一个元素的索引是 9
b.访问元素的格式
固定格式:
数组名[索引]
c.数组的长度属性
固定格式:
数组名.length
d.练习通过索引访问数组的元素(代码演示)
数组原理内存图
1.内存的介绍
内存:存放运行时的数据
硬盘:持久保存数据
2.Java虚拟机内存划分
五大区!!
栈(stack): 保存(局部)变量,运行方法
堆(heap): 保存new出来的东西
方法区(method area):保存.class文件
本地方法区: 和系统相关
寄存器区: 和CPU相关
3.数组的内存图解(一个数组)
4.数组的内存图(两个数组)
5.数组的内存图解(两个数组变量名指向同一个数组)
数组的常见操作
1,数组越界异常
ArrayIndexOutOfBoundsException:数组越界异常
解决方法:
修改源代码,修改那个越界的索引
2.数组空指针异常
NullPointerException:空指针异常
产生原因:清空了数组名保存的地址值,但是又去访问数组
解决方案:
如果还要访问数组的元素,那么就不要清空地址
如果不需要访问数组的元素,那么清空地址
3.数组遍历(重点!!!!)
a.什么叫遍历
把数组中的所有元素都获取一遍
b.遍历的标准代码
for (int i = 0; i < 数组名.length; i++) {
System.out.println(数组名[i]);
}
4.获取数组最大值/最小值
//1选一个元素 作为最大值
int max = nums[0];
//2.依次取出后面的元素 和 max做比较
for(int i = 1;i < nums.length; i++){
//nums[i] 和 max做比较
if (nums[i] > max) {
//元素比max大,那么新元素作为最大值
max = nums[i];
}
}
//3.最后剩下就是最大值
System.out.println("最大值:"+max);
5.数组的反转
int[] nums = {4,3,5,6,1,8,13,10,15,17};
//反转数组,使用While
// //1.定义两个索引
// int min = 0;
// int max = nums.length - 1;
// //2.循环,交换元素,并且min++,max--
// while (min < max) {
// //当小索引 比 大索引小的时候
// // nums[min] 和 nums[max]
// int temp = nums[min];
// nums[min] = nums[max];
// nums[max] = temp;
// //小索引++ ,大索引--
// min++;
// max--;
// }
//3.使用for循环
for (int min = 0,max = nums.length-1;min < max;min++,max--){ int temp = nums[min];
nums[min] = nums[max];
nums[max] = temp;
}
//4.测试数据打印
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + " ");
}
数组作为方法的参数和返回值
1.数组作为参数(代码实现)
当方法的参数比较多的时候,可以选择使用数组作为方法的参数
但是这些参数必须保证数据类型是一致的
2.数组作为返回值(代码实现)
当一个方法需要返回值多个值的时候,必须选择数组作为方法的返回值
但是这些返回值必须保证数据类型是一致的
[有时间扩展]方法的参数类型区别
a.参数基本类型
基本类型作为方法参数时,
形参改变 不会影响实参
b.参数引用类型
引用数据类型作为方法的参数时,
形参的改变会影响实参
总结:
[ ] 理解容器的概念
[ ] 掌握数组的第一种定义方式
int[] nums = new int[10];- [ ] 掌握数组的第二种定义方式
int[] nums = new int[]{1,2,3,4,5}; - [ ] 掌握数组的第三种定义方式
int[] nums = {1,2,3,4,5} - [ ] 使用索引访问数组的元素
索引:数组中元素的编号,默认从0开始
访问格式:
数组名[索引] = 值;//赋值
数据类型 变量名 = 数组名[索引];//取值
- [ ] 了解数组的内存图解
- [ ] 了解空指针和越界异常
- [ ] 掌握数组的遍历
- [ ] 掌握数组最大值的获取
- [ ] 了解数组反转的原理
- [ ] 了解数组作为方法参数传递 - [ ] 了解数组作为方法的返回值