目 录
一.数组(一维数组)
1.什么是数组,为什么要有数组以及数组的基本格式
数组可以看作是一个容器,可以存储多个数据类型一致的元素.当需要定义许多个相同数据类型的变量时,一个一个的定义就很麻烦!所以就出现了数组.可以定义多个数据类型一致的元素.
例如需要存入学生的成绩:
//定义单个变量接收时:
int a=99;
int b=78;
int c=55;
int d=68;
int e=90;
//如果有30个学生,就需要定义30个变量来接收,这样就太复杂了!
//定义数组,这个数组装学生的成绩
int[] arr={99,78,55,68,90}
//这样一比较就会发现数组更实用
格式: 数据类型[ ] 数组名 (数组必须先初始化,才能使用.初始化也就是new一下就ok啦!)
数组的初始化:在内存中为数组元素开辟空间,并为数组元素赋值! (数组的初始化分为两种哟!)
2.数组的初始化
动态初始化
- 格式: 数据类型[ ] 数组名=new 数据类型[ 数组长度 ] ------> int[ ] arr=new int[3];
(由我们自己规定数组长度,由系统为数组元素赋值,数组元素会有排序的序号,称为索引.从0开始)
- 通过索引来获取数组中的元素: 例: int a=arr[0]; (获取数组中索引号为0的元素)
动态初始化是系统给数组元素赋值,我们要是想重新定义数组中的元素的值,也是很欧克的啦!
- 给数组中的元素重新赋值: 例: arr[1]20; (给数组中的索引号为1的元素重新赋值为20)
- 打印数组在堆中的地址值: System.out,println(arr);
- 获取数组的长度(数组的内置属性): int a=arr.length;
- 获取数组元素中最后一个元素的索引: int a=arr.length-1;
- 数组中的数组元素的默认值:
数据类型 | byte/short/int/long | double/float | boolean | char | String |
默认值 | 0 | 0.0 | false | 空格 | null |
- 内存分配图: (记住:每new一次,都会在堆内存中开辟出新的空间!)
(查看栈和jvm的内存简图 ----------> !点击这里!)
静态初始化
- 格式: 数据类型[ ] 数组名=new 数据类型[ ]{ 数组元素 } ------>int[ ] arr=new int[ ]{10,20,30};
(由我们为数组元素赋值,由系统计算数组长度! 上述格式也可以简写为: int[ ] arr={10,20,30};)
- 内存分配图:
(方法用完依然会弹栈的哈!由于小编的粗心,给整忘了!)
二.二维数组
1.什么是二维数组,为什么要有二维数组
二维数组的数组元素是一维数组的数组.也就是数组嵌套着数组.那么为什么要有二维数组呢?
假如我们现在需要统计学校每个班的学生的姓名!用一维数组时:第一个班级创建一个数组来装名字,第二个班级再创建一个数组来装名字,有多少个班级就需要多少个一维数组来装.而二维数组就只需要创建一个用来装每个班名字的一维数组就可以了!
//用一维数组时:
String[] arr={"张","三","李","四"}; //第一个班级的姓名
String[] arr2={"王","五","刘","六"}; //第一个班级的姓名
//.......
//用二维数组时:
String[] arr{
{"张","三","李","四"},{"王","五","刘","六"}......}
2.定义格式:
动态初始化
- int[ ][ ] arr=new int[3][2]; (3是二维数组的数组长度,2是指每个一维数组的数组长度!)
还有其他定义格式:int arr[ ][ ]=new int[3][2];或int[ ] arr[ ]=new int[3][2];(不建议使用这两种形式)
相关代码的意思:
int[][] arr=new int[3][2];
arr[0]; //取出的是二维数组中的第一个元素,也就是第一个一维数组
System.out.println(arr[0]); //输出的是第一个一维数组的地址值
arr[0][0]; //取出的是第一个一维数组的第一个数组元素
System.out.println(arr[0][0]); //输出的是第一个一维数组的的第一个元素.现在是默认为0
arr[0][0]=100; //给第一个一维数组的的第一个元素重新赋值
int[ ][ ] arr=new int[3][ ];这样也是可以的.第二个中括号不定义长度.
此时System.out.println(arr[0][0]); 输出的是null.这是为什么呢?
如果定义二维数组时,指定了一维数组的长度,就会开始自动初始化一维数组的长度.内存图如下:
由图中可知,如果给一维数组定义了长度,就会自动初始化一维数组的长度.如果没有定义,就会成为最开始开辟出来的空间,里面没有初始化一维数组的长度.也就是所有的初始值为null!
如果此时按照arr[0][0]=10;这样进行赋值的话,就会报空指针异常.因为此时指向的是null.如果想手动赋值:可以给二维数组赋值相应的以为数组.如下面的代码所示:
int[][] arr=new int[3][];
arr[0]=new int[4];
arr[1]=new int[3];
arr[2]=new int[4];
静态初始化
格式: Int[ ][ ] arr=new int{ {1,2,3},{4,3,5}}; 可以简写为 int[ ][ ] arr={ {1,2,3},{4,3,5}};
三.数组常遇到的异常和数组习题
1.数组角标越界异常
数组一旦定义,其长度就固定不变了!也就是访问的数组元素索引不存在!越出数组范围了!
int[] arr=new int[3];
System.out.println(arr[3]);
2.空指针异常
空指针异常针对所有引用数据类型,都有可能出现(所指向的对象为空时,就会出现空指针异常):
int[] arr=new int[3];
arr= null;
int a=arr.length;
System.out.println(a);
如果这个对象用完之后置为null,更加有利于该对象尽快回收的哈!!!
3.数组习题
遍历数组:
(将数组中的所有的元素都输出就是遍历!)
//顺向遍历
int[] arr={11,22,33}; //定义数组
for (int i=0;i<arr.length;i++){ //索引从0开始,所以i最开始为0,遍历的索引号为0,1,2.所以比数组的长度要小
System.out.println(arr[i]); //输出11,22,33
}
//反向遍历
for (int i=arr.length-1;i>=0;i--){
System.out.println(arr[i]); //输出33,22,11
}
想要查看更多习题, "点击这里"
(小编也在努力学习更多哟!以后会多多分享哒!)
希望对友友们有所帮助!!!!