数组的定义
格式一:数组类型 [] 数组名
格式二:数组类型 数组名[]
数组的初始化
静态初始化
**初始化:**在内存中,为数组容器开辟空间,并将数据存入容器的过程
格式: 数据类型[] 数组名 = new 数据类型[] {元素...}
简化格式: 数据类型[] 数组名 = {元素...}
打印输出: 输出数组名,返回的是数组的地址
数组的遍历: 使用for循环
数组的长度: arr.length
动态初始化
初始化只指定数组的长度,由系统分配初始值,有虚拟机给出默认的初始化值
格式: 数据类型[] 数组名 = new 数据类型[数组长度]
**数组初始化值的规律:
- 整数类型:0
- 小数类型:0.0
- 字符类型:
/u0000
空格 - 布尔类型:false
- 引用数据类型:null
静态初始化和动态初始化的区别
动态初始化:手动指定数组长度,系统给出默认初始化值
- 只明确元素个数,不明确数值,推荐使用动态
静态初始化:手动指定数组元素,系统根据元素个数,计算出数组的长度 - 需求中明确了操作的具体数据,直接静态初始化
数组常见问题
访问不存在的索引,报出数组越界错误
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at com.array.ArrayDemo1.main(ArrayDemo1.java:13)
数组内存图
Java内存分配
栈、堆、方法区、本地方法栈、寄存器
从JDK8开始,取消了方法区,新增元空间,把原来方法区的功能进行拆分,有的放在堆中,有的放在元空间
- 栈:方法运行时使用的内存
- 堆:存储对象或数组,new创建的,都存储在堆内存中
- 方法区:存储可以运行的class文件
- 本地方法栈:JVM在使用操作系统功能的时候使用,和开发无关
- 寄存器:给CPU使用,和开发无关
数组内存图
两个数组指向同一个空间的内存图
当两个数组指向同一个小空间时,其中一个数组对小空间中的值发生了改变,那么其他数组再次访问的时候都是修改之后的结果了