引导-数组
变量存储同一组数据的弊端:
1:命名和书写繁琐
2:使用时的效率低下
引入数组:
概念:是内存中一块连续的存储空间,作用为同时存放多个相同数据类型的值
创建方式:【四种】
第一种:先声明,后指明长度
书写格式:
数据类型 []数组名;//声明
数组名=new 数据类型[长度];//指明长度
代码演示:
int []arr;
arr=new int[3];
要求:
数组创建时必须指明长度,作用为方便内存分配空间
长度必须为整型
第二种:声明的同时直接指明长度
书写格式:
数据类型[] 数组名=new 数据类型[长度];
代码演示:
int [] arr2=new int[3]
第三种:创建的同时直接存放数据
书写格式:
数据类型[] 数组名=new 数据类型{】{值1,值2,值3,值4,值n};
代码演示:
int[] arr =new int[] {10,20,30,40,50};
要求:数组长度由值的个数决定
右侧[]中不可再次指明长度
第四种:创建的同时直接存放数据-简写
书写格式:
数据类型[] 数组名= {值1,值2,值3,值4,值n};
代码演示:
int[] arr={10,20,.30};
要求:无法先声明,后{}直接赋值
代码演示:
int []arr5;
arr5={10,30,40};//错误的:
arr5=new int[]{10,20,30,40};//正确的
数组的应用:
应用注意:
1:通过下标操作数组元素
2:下表从0开始,至数组长度前一位结束
3:通过下标取值赋值
书写格式:
取值:数组名[下标]
存值:数组名[下标]=值
4:下标的使用不可超出范围,否则会报出数组下标越界异常
报错代码如下:
java.lang,ArratIndexOutOfBoundsException;
5:可以通过数组名.length动态获取数组长度
代码演示:
遍历
遍历就是依次查看数组的数据的过程
书写格式:
for(int i - 0;i<数组名.length;i++){
//i代表下标
//通过数组名[i]获取当前正在被遍历的元素值
}
代码演示:
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
数组高级:
深入数组底层
1:数组时引用类型
2:底层存放:栈中存放引用名(数组名),引用名对应堆中的一块空间,堆空间中存放数组的具体信息(值)
3:引用类型之间相互赋值传递的是堆的地址
4:“逢new必开”:只要执行到new关键字,堆中一定会开辟空间
5:为了保证内存空间的正常分配,数组存在默认值
特别注意之 名词解释:
默认值:是编译器给的,是空间的第一次赋值
初始值:是程序员手动第一次的赋值
各数据类型的默认值:
int :0
double:0.0
boolean:false
char:空
string:null
数组扩容:
1:创建一个长度更大的数组(通常为原数组的两倍)
2:将原数组的数据赋值到新数组中
3:将引用的地址转向新数组
数组扩容-1:利用for循环
数组扩容-2:利用arraycopy方法
代码格式:
System.arraycopy(原数组名,原数组复制起始下标,新数组名,新数组复制起始下标,复制长度)
数组扩容-3:利用copyof方法
代码格式:
新数组地址:java.util.Arrays.copyOf(原数组名,预期的数组长度)
最后:数组缩容同理