一、数组
数组是指一种容器,可以用来存储同种数据类型的多个值。
1.数组静态初始化
初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程。
语法:
①完整格式:
数据类型[] 数组名 例子:int[] array
数据类型 数组名[] 例子:int array[]
int[] array = new int[]{ 1 , 2 , 3 };
②简化格式:
数据类型 [] 数组名 = { 元素 1 ,元素 2 ,元素 3... };
int[] array = { 1 , 2 , 3 };
2.数组元素的访问
格式:数组名[索引]
索引:索引是数组容器中空间的编号,编号从 0 开始,逐个 +1 增长
注意:若果我们直接打印数组名会发现数据名存储的是一个16进制的地址名,这个地址名就是数组在内存中的位置,根据这个位置再加上索引就可以找到数组中的元素
例如:int array1={1,2,3}
System.out.println(array1);
3.数组遍历
数组遍历:将数组中所有的内容取出来,取出来之后可以(打印,求和,判断 .. )
案例1:已知数组元素为{20,21,23,24,25,26}请将数组中偶数元素取出并求和,最后打印出求和结果
案例2:已知数组元素为{20,21,32,24,54,26}求数组中的最大值
4.数组动态初始化
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
格式:数据类型 [] 数组名 = new 数据类型[ 数组长度 ]
范例:int[] arr = new int[3]
动态初始化与静态初始化的区别:
动态初始化是手动指定数组长度,由系统给出默认初始化
静态初始化是手动指定数组元素,系统会根据元素个数,计算出数组的长度
案例一:键盘录入5个整数并求最大值
案例二:产生10个1-100之间的随机数,并找出最大值(求最大值看案例一的第二个图片)
5.java内存分配介绍:
方法最开始是放在方法区,被调用后进入栈内存,在占内存创建数组的时候,就会在堆内存中开辟一块空间,用于存储数组的各个元素。
注意:简化格式只是简写了代码书写,真正运行期间还是按照完整格式运行
int[] arr = new int[]{1,2,3}
注意: arr1存储的其实是数组在堆内存中的地址,再赋值给arr2时给个也是地址,两个数组指向的是一个内存空间
6.数组常见问题:
① ArrayIndexOutOfBoundsException 当访问了数组中不存在的索引,就会引发索引越界异常
② 当引用数据类型变量被赋值为 null 之后,地址的指向被切断,还继续访问堆内存数据,就会引发空指针异常
二、二维数组
二维数组是一种容器,该容器用于存储一维数组
格式:数据类型 [][] 数组名 = new 数据类型 [][] {{ 元素 1, 元素 2},{ 元素 1, 元素 2}};
范例: int[][] arr = new int[][]{{11,22},{33,44}};
简化格式:数据类型 [][] 数组名 = {{ 元素 1, 元素 2}, { 元素 1, 元素 2}};
范例: int[][] arr = {{11,22},{33,44}};
访问格式:数组名 [ 索引 ][ 索引 ];
访问范例: int[][] arr = new int[][]{{11,22},{33,44}};
arr[1][0];
遍历是双层的的for循环,开辟空间时第一层数组空间存贮的是第二层的数组空间的地址