1、容器的概念
1)、数组
定义一次,可以装多个数据
2)、集合
2、数组的概念
1)、定义一次
2)、保存多个数据
3)、数据类型必须一致
4)、数组一旦创建,长度是固定不变的(容量不变)
5)、通过数组下标进行操作
3、数组的定义格式一(常用)
1)、由我们指定长度
格式
数据类型[] 数组名 = new 数据类型[长度];
=号俩边数据类型必须相同;
长度必须大于0;
4、数组的定义格式二
1)、内容由我们指定
2)、长度由系统计算
格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...}
=号右边的[]不能写长度
5、数组的定义格式三(常用)
1)、内容由我们指定
2)、长度由系统计算
3)、简化格式
格式
数据类型[] 数组名 = {元素1,元素2,元素3...}
省略=号和大括号间的
6、数组的使用
1)、保存多个数据
2)、获取数据
3)、修改数据
使用数组名[索引]
索引是从0开始,到长度-1;
7、数组属性length
数组名.length代表数组长度;
可以用来遍历数组;
可以直接访问数组中最后一个元素 [数组名.length-1]
8、JVM的内存
程序运行时请求的内存;
JVM内存分为5块;
1)、方法栈 Stack:保存变量,运行方法(main)
2)、堆内存 Heap:保存new的东西
3)、方法区 Method Area:保存class,保存的是方法
4)、寄存器:cpu,与开发无关
5)、本地方法栈:与开发无关
区域名称 | 作用 |
---|---|
寄存器 | 给CPU使用,和我们开发无关。 |
本地方法栈 | JVM在使用操作系统功能的时候使用,和我们开发无关。 |
方法区 | 存储可以运行的class文件。 |
堆内存 | 存储对象或者数组,new来创建的,都存储在堆内存。 |
方法栈 | 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。 |
9、一个数组的内存
数组就是一个引用类型
引用变量保存的是堆的内存地址
变量其实保存的是数组中第一个索引的地址
直接使用变量名,是使用变量的首地址
[I@75412c2f
[ 代表数组,I 代表int
数组变量保存的是数组的首地址 @在内存中的位置(十六进制)
10、多个数组的内存
多个数组地址不可以相同,否则无法找到所要找的数组
11、俩个数组名指向同一个数组
只需要将一个数组的地址赋值给另一个数组
12、数组越界异常
数组索引超出长度-1;造成程序崩溃
13、数组空指针异常
1)、数组的变量保存的是内存中的地址
2)、有地址才可以修改或者访问数组的元素
数组空指针异常:
1)、数组变量保存的地址被清空(变量名 = null)
在开发中
1)、清空后,就不要进行访问、修改
2)、不清空
14、数组的最值(擂台思想)
1)、擂台先放0号元素为擂主
2)、擂主与其他元素一一vs,最终留下一个擂主
1)、顶一个max变量赋值为0号元素
2)、一个循环,在循环中max与其他元素进行对比,大的覆盖max
3)、最后max找到最大值
15、数组的反转思想
反转:12345->54321
数组的反转:
1)、找到对称位置
2)、对称位置的元素进行互换
3)、实现数组反转
public static void main(String[] args) {
int[] num = {1,2,3,4,5,6};
int min = 0;
int max = num.length-1;
while(min < max){
//定义中间量,进行互换
int temp = num[min];
num[min] = num[max];
num[max] = temp;
min++;
max--;
}
for (int i = 0; i < num.length; i++) {
System.out.print(num[i]);
}
}
16、数组作为方法参数
1)、基本类型能做,引用类型也可以
2)、多个数据
3)、类型必须一致
4)、“打包原理”
5)、当相同类型的参数太多时,使用数组最为方便
17、数组作为方法返回值
1)、基本类型可以,引用类型也可以
2)、return返回值;必须和方法的返回值类型一致
3)、return返回值;代表方法的结束,后面不可以再写东西
4)、如果要返回多个数据,且类型相同,继续打包
18、参数为基本类型与引用类型区别
基本类型:
1)、调用处将实参复制一份给形参
2)、方法内改形参
3)、不影响实参
引用类型:
1)、调用处将实参数组的 首地址
复制一份给形参
2)、方法内修改形参
3)、实参也会受到影响
不需要使用return就可以得到
复习
[ ] 理解容器的概念
可以装多个物品在内,但容量为定值
[ ] 掌握数组的第一种定义方式
格式
数据类型[] 数组名 = new 数据类型[长度]
[ ] 掌握数组的第二种定义方式
格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...}
由系统自动确定数组长度
[ ] 掌握数组的第三种定义方式
格式
数据类型[] 数组名 ={元素1,元素2,元素3...}
由系统自动确定数组长度
[ ] 使用索引访问数组的元素
数组名[索引]
注意索引值为0~数组名.length
[ ] 了解数组的内存图解
JVM内存分为 5个部分
方法栈 stack:存放变量,和方法
堆内存 heap:保存new的数据
方法区 method area:存放class文件
[ ] 了解空指针和越界异常
空指针异常:数组首地址被清空,在使用数组时发生空指针异常
越界异常:数组索引超出了数组长度-1,在使用时便会产生越界异常
[ ] 掌握数组的遍历
for(int i = 0 ; i < 数组名.length ;i++){ 遍历代码; }
[ ] 掌握数组最大值的获取
使用擂台思想,先让第一个元素当擂主,后面的元素一个一个与其对比
[ ] 了解数组反转的原理
定义一个min = 0;定义一个max = 数组名.length-1,定义中间量对变量名[min],变量名[max]进行变换,从而实现反转,min++,max–,但min