文章目录
一、数组的定义格式
1.什么是数组?
数组(array)是一种用于存储多个相同类型数据的存储模型。
- 一次性声明大量的用于存储数据的变量
- 要存储的数据通常都是同类型的数据,例如考试成绩
2.数组格式:
格式一:数据类型[ ] 变量名;
int[] arr;
定义了一个int类型的数组,数组名是arr。
格式二:数据类型 变量名[ ];
int arr[];
定义了一个int类型的变量,变量名是arr数组。
二、数组初始化
Java中的数组必须先初始化,然后才能使用。
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
1.动态初始化
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
格式:数据类型[ ] 变量名 = new 数据类型[数组长度];
int[] arr = new int[3];
(1)二维数组
int[][] arr = new int[2][3];
2.静态初始化
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
格式:数据类型[ ] 变量名 = new 数据类型 [ ] {数据1,数据2,数据3,……};
int[] arr = new int[]{1, 2, 3};
简化格式:数据类型[ ] 变量名 = {数据1,数据2,数据3,……};
int[] arr = {1, 2, 3};
(1)二维数组
int[][] arr = {{1, 2, 3}, {4, 5, 6, 7}, {1, 2, 3, 4, 5, 6, 7}, {1}};
3.两种输出格式的区别
- 动态初始化:只给定数组长度,由系统分配默认初始化值
- 静态初始化:创建数组时,直接将元素确定
三、数组元素访问
数组变量访问方式
格式:数组名
数组内部保存的数据的访问方式
格式:数组名[索引]
1.索引
索引是数组中数据的编号方式。
作用:索引用于访问数组中的数据使用,数组名[索引]等同于变量名,是一种特殊的变量名。
特征:
- 索引从0开始
- 索引是连续的
- 索引逐一增加,每次加1
四、内存分配
Java程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
- 栈内存:方法运行时,进入的内存,局部变量都存放于这块内存当中。
- 堆内存:new出来的内容都会进入堆内存,并且会存在地址值。
- 方法区:字节码文件(.class文件)加载时进入的内存。
- 本地方法栈:调用操作系统相关资源。
- 寄存器:交给CPU去使用。
其中,本地方法栈和寄存器我们暂不考虑。
内存中的执行流程:
①该类的字节码文件加载进方法区,main方法存放在字节码文件中
②main方法被JVM自动调用进入栈内存执行
③arr数组变量在main方法中声明
④new int[3] 通过int关键字在堆内存中开辟空间,并产生地址值,因为new的是长度为3的数组,所以会划分出3块小格子,每个格子都有自己的索引和默认初始值
⑤将地址值赋给main方法中的 arr变量
⑥后续代码执行结果
五、数组操作常见异常
- ArrayIndexOutOfBoundsExceptio
索引越界:访问了数组中不存在的索引对应的元素,造成索引越界问题。 - NullPointerException
空指针异常:访问的数组已经不再指向堆内存的数据,造成空指针异常。