数组的定义:数组就是用来存储一批同种类型数据的内存区域(可以理解为容器)
数组适合做一批同种类型数据的存储
案例:
int [ ] arr = {1,2,3,4};
数组的分类:
静态初始化数组:定义数组的时候直接给数组赋值
格式:
数据类型 [ ] 数组名=new 数据类型 [ ] { , , , , };
简化格式:
数据类型 [ ] 数组名= { , , , , };
注意:数组变量名中存储的是数组在内存中的地址,数组是引用类型
数组的注意事项:
1.数据类型 [ ] 数组名 也可写成 数据类型 数组名 [ ]
2.什么类型的数组存放什么类型的数据,否则报错
3.数组一旦定义出来,程序执行的过程中,长度和类型就固定了
数组的访问:
数组名称 [索引]
案例:
//取值
System.out.println(arr [0]);
//赋值
arr[2]=100;
System.out.println(arr [2]);//100
数组的长度属性:length
//获取数组的长度(就是满足数组元素的个数)
System.out.println(arr.length);(数组名.length)
数组的最大索引表示方法:数组名.length-1 //前提:元素个数大于0
动态初始化数组:定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据
格式:
数据类型[ ] 数组名=new 数据类型 [长度]
元素默认值规则:
数据类型 明细 默认值
基本类型 byte,short,char,int,long 0
float,double 0.0
boolean false
引用类型 类,接口,数组,String null
静态初始化数组和动态初始化数组:
1.当前已知存入的元素,用静态初始化数组,当前未知存入的元素,用动态初始化数组
2.动态初始化数组:只指定数组长度,后期赋值,适合开始知道数据的数量,但是不确定具体元素值的业务场景
3.静态初始化数组:开始就存入元素值,适合一开始就能确定元素值的业务场景
3.两种格式的写法是独立的,不可混用
数组的遍历:就是一个一个数据的访问
使用遍历的原因:搜索,统计数据等都需要用到遍历
格式:
for (int i=0;i
System.out.println(arr[i]);
}
数组的内存图:
Java内存分配介绍:
栈内存:方法运行时所进入的内存,变量也是在这里(main方法)
堆内存:new出来的东西会在这块内存中开辟空间并产生地址(new对象)
方法区:字节码文件加载时进入的内存(class文件)
本地方法栈
寄存器
数组使用的常见问题:
1.如果访问的元素位置超过最大索引,执行是会报错(数组索引越界异常)
2.如果数组变量中没有存储数组的地址,而是null,在访问数组信息时会出现报错(空指针异常)



