数组
1.数组的概述和定义格式说明
A:数组概述:数组是存储多个变量(元素)的东西(容器),多个变量的数据类型要一致
B:数组概念:数组是存储同一种数据类型多个元素的集合。
数组既可以存储基本数据类型,也可以村存储引用数据类型。引用数据类型:数组 类 接口 等
C:数组定义格式
格式1:数据类型[] 数组名
格式2:数据类型 数组名[]
举例:int[] a; 定义了一个int类型的数组a;
int a[]; 定义了一个int类型的a数组
2.数组的动态初始化
A:动态初始化定义:Java中的数据组必须先初始化,然后在使用
初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
B:初始化分类:
a.动态初始化:只指定长度,由系统给出初始化值
例如:int[] arr=new int[3];
方式2 int arr2=new int[3];
b.静态初始化:给出初始化值,由系统决定长度
注意事项:这两种方式,只能使用一种,不能进行动静结合。
C:动态初始化格式:
数据类型[] 数组名=new 数据类型[数组长度]
数组长度其实就是数组中元素的个数。
例如:int [] arr=new int[3];定义了一个int类型的数组arr,这个数组可以存放3个int类型的值。
数组的元素会编有索引,从0开始
根据索引可以获取数组元素的值,也可以给数组元素重新赋值
D:案例演示
输出数组名称和数组元素
2.Java中的内存分配以及栈和堆的区别
2.1 Java语言的内存分配**
A:栈:存放的是局部变量
局部变量:在方法定义中或者方法声明上的变量都是局部变量
B:存放的是所有new出来的东西
特点:a.每一个new出来的东西都会为其分配一个地址值
b.每一个变量都有一个默认值
byte,short,int,long --0
float,double --0.0
char ---'\u0000'
boolean ----false
引用数据类型 ----null
c:使用完毕就变成垃圾,等待垃圾回收器对其回收
C:方法区:
D:本地方法区:(和系统相关)
E:寄存器:(cpu使用)
2.2 Java内存分配区域
3数组的内存
3.1 图解1一个数组
A:定义一个数组,输出数组名称和数组中的元素值,给数组赋值,再次输出数组名称和数组中的元素值
3.2 数组的内存图解2二个数组
A:定义两个数组,分别输出数组名称和数组中的元素值,分别给两个数组赋值,再次输出数组名称和数组中的元素值
3.3 数组的内存图解3三个引用2个数组
A: 定义第一个数组,定义完毕后,给数组元素赋值。赋值完毕后,再输出数组名称和元素。
定义第二个数组,定义完毕后,给数组元素赋值。赋值完毕后,再输出数组名称和元素。
定义第三个数组,把第一个数组的地址值赋值给它。(注意类型一致),通过第三个数组的名称去把元素重新赋值。
最后,再次输出第一个数组数组名称和元素。
3.4 数组的初始化静态初始化及内存图
A:静态初始化的格式:
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例: int[] arr = new int[]{1,2,3};
简化格式:
数据类型[] 数组名 = {元素1,元素2,…};
举例: int[] arr = {1,2,3};
B:画图演示
a:定义一个数组,输出数组名称和数组中的元素值
3.5 数组操作的两个常见小问题越界和空指针
A:案例演示
a:ArrayIndexOutOfBoundsException:数组索引越界异常
原因:你访问了不存在的索引。
b:NullPointerException:空指针异常
原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200413113547844.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0lUemhhemhhc3Nj,size_16,color_FFFFFF,t_70)
3.6 数组的基本操作
3.6.1 遍历
A:案例演示: 数组遍历:就是依次输出数组中的每一个元素。
3.6.2 获取最值
A:案例演示: 数组获取最值(获取数组中的最大值或者最小值)
3.6.3 反转
A:案例演示: 数组元素反转(就是把元素对调)
3.6.4 查表法
A:案例演示: 数组查表法(根据键盘录入索引,查找对应星期)
3.6.5 基本查找
A:案例演示: 数组元素查找(查找指定元素第一次在数组中出现的索引)
1.二维数组
1.1二维数组概述和格式1的讲解
A:二维数组概述:二维数组其实就是每一个元素为一维数组的数组。
B:二维数组格式1
数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组有多少个一维数组 必须写上
n表示每一个一维数组的元素个数 可选
举例:
int[][] arr = new int[3][2];
定义了一个二维数组arr
这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]
每个一维数组有2个元素,可以通过arr[m][n]来获取
表示获取第m+1个一维数组的第n+1个元素
C:注意事项
A:以下格式也可以表示二维数组
a:数据类型 数组名[][] = new 数据类型[m][n];
b:数据类型[] 数组名[] = new 数据类型[m][n];
这两种格式不推荐使用
B:注意下面定义的区别
int x,y;
int[] x,y[];
区别是:
int[] x,y[];//定义了两个数组 一个是一维数组x 一个是二维数组y
x=new int[3];
y=new int[3][];
D:案例演示
定义二维数组,输出二维数组名称,输出每一个一维数组名称,输出二维数组的2个元素
1.2 二维数组格式1的内存图解
1.3 二维数组格式2的讲解及其内存图解
A:二维数组格式2
数据类型[][] 变量名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组
这一次没有直接给出一维数组的元素个数,可以动态的给出。
举例:
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];
B:案例演示
定义一个二维数组,输出二维数组的名称和二维数组的的每一个一维数组,然后动态给二维数组赋值一维数组
再次输出二维数组中的每一个一维数组,给二维数组中的元素赋值,输出对应的元素值
1.4 二维数组格式2的内存图解
1.5 二维数组格式3的讲解
A:二维数组格式3
数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}...};
简化版:
数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
这个格式属于静态初始化:由我们指定具体的元素值,由系统给分配长度
举例:
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
int[][] arr = {{1,2,3},{5,6},{7}};
B:案例演示
定义一个二维数组,打印每一个二维数组中的一维数组,在打印每一个二维数组中的元素
1.6 二维数组练习1遍历
A:案例演示
需求:二维数组遍历
外循环控制的是二维数组的长度,其实就是一维数组的个数。
内循环控制的是一维数组的长度。
1.7二维数组练习2求和
A:案例演示
需求:公司年销售额求和
某公司按照季度和月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
B:需求:打印杨辉三角形(行数可以键盘录入)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
分析:看这种图像的规律
A:任何一行的第一列和最后一列都是1
B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
2.参数传递
A:案例演示
看程序写结果,并画内存图解释