目录
一、数组的定义
1、定义格式1:
数据类型[] 数组名;
int[] arr;
2、定义格式2:
数据类型 数组名[];
int arr[];
二、数组的初始化
Java的数组初始化就是给数组对象分配内存空间并且给每个数组元素给予初始值。Java的数组也是静态的。就是说数组在被初始化后数组的长度是不可改变的
1、数组的静态初始化
程序员决定数组的初始值,系统决定数组的长度
数据类型[] 数组名 = {元素1,元素2,元素3...};
int[] arr = {1,2,3,4,6,7};
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...}
String[] arr = new String[]{"javaee","hello","world","java"};
2、数组的动态初始化
程序员只决定数组元素的长度,系统分配元素初始值,动态初始化的数组元素值全为0或null。
数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3];
三、内存分配
栈内存:Java程序中用于存放局部变量和函数调用的内存结构,是指计算机内存中用于存储局部变量、方法参数和方法执行时计算的中间结果的部分。
堆内存:用于存储new出来的东西。堆内存还用于存储在 Java 程序执行期间创建的临时变量。
单个数组内存图:
多个数组内存图:
多个数组指向相同内存图:
注意:两个变量指向同一个数组,指向的是地址值。此时,修改一方,另一方的值也会发生改变。
四、常见问题
1、索引越界问题:
访问了数组中不存在的索引对应的元素,造成索引越界问题,程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。。
解决方法:
将错误的索引修改为正确的索引范围即可
2、空指针异常问题:
访问的数组已经不再指向堆内存的数据,造成空指针异常,意味着数组变量将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。
解决方法:
给数组一个真正的堆内存空间引用即可