05.01_数组概述和定义格式
A:数组的概念:
数组是存储同一种数据类型多个元素的集合。也可以看成是一个 容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
B:数组定义格式:
格式1:数据类型[] 数组名;
格式2:数据类型 数组名[];
05.02_数组的动态初始化
A:什么是数组的初始化
Java中的数组必须先初始化,然后才能使用。
初始化:为数组中的数组元素分配内存空间,并为每个数组元素赋值。
B:初始化的分类:
a:动态初始化: 只指定长度,由系统给出初始化值
b:静态初始化: 给出初始化值,由系统决定长度
注意事项:两种方式,只能使用一种,不能动静结合
C:动态初始化的格式:
数据类型[] 数组名 = new 数据类型[数组长度];
数组长度其实就是数组中元素的个数。
举例:int[] arr = new int[3]; 定义了一个int类型的数组arr,这个数组可以存放3个int类型的值。
05.03_Java中的内存分配以及栈和堆的区别
A:栈:存放的是局部变量
局部变量:在方法定义中或者方法声明上的变量都是局部变量。
B:堆:存放的是所有new出来的东西
特点:
a:每一个new出来的东西都会为其分配一个地址值。
b:每一个变量都有一个默认的值
byte,short,int,long —— 0
float,double —— 0.0
char —— '\u0000'
boolean —— false
引用数据类型 —— null
C:方法区:(面向对象部分讲解)
D:本地方法区:(和系统相关)
E:寄存器:(cpu使用)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d0652459fc26de724021026ebd2ae30a.png)
05.04_数组的静态初始化
A:静态初始化的格式:
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...}
举例: int[] arr = new int[]{1,2,3};
简化格式:
数据类型[] 数组名 = {元素1,元素2,...};
举例:int[] arr = {1,2,3};
05.05_数组操作的两个常见小问题(越界和空指针)
A:
ArrayIndexOutOfBoundsException:数组索引越界异常
原因:你访问了不存在的索引。
B:
NullPointerException:空指针异常
原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。
05.05_二维数组概述
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:以下格式也可以表示二维数组
(1):数据类型 数组名[][] = new 数据类型[m][n];
(2):数据类型[] 数组名[] = 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
数据类型[][] 变量名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组
这一次没有直接给出一维数组的元素个数,可以动态的给出。
举例:
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];
E:二维数组格式3
数据类型[][] 变量名 = new 数据类型[][]{{元素...},{元素...},{元素...}...};
简化版:
数据类型[][] 变量名 = {{元素...},{元素...},{元素...}};
这个格式属于静态初始化:由我们指定具体的元素值,由系统给分配长度
举例:
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
int[][] arr = {{1,2,3},{5,6},{7}};
05.06_递归
A:递归概述:方法定义中调用方法本身的现象
B:递归注意事项
要有出口,否则就是死递归
次数不能太多,否则就内存溢出