1. 数组定义格式及初始化
-
什么是数组?
-
该如何定义数组?
1: 数组就是一个[容器], 用来存储[同种数据类型]的多个值.
如果定义的数组类型是一个int类型的, 该数组容器就只能存储int类型的整数.
不能存储String类型的字符串.
细节: 如果创建的数组容器类型是一个double类型的, 该数组容器可以存储double以下的整数类型.
2: 定义数组的格式:
数据类型[] 数组名;
int[] arr1;
动态初始化:
数据类型[] 数组名 = new 数据类型[数组的长度];
int[] arr = new int[3];
静态初始化:
完整格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
简化格式:
数据类型[] 数组名 = {元素1,元素2,元素3...};
注意: 简化格式当中没有看到new关键字, 但是也会在堆内存开辟空间并产生地址值.
int[] arr = {11,22,33,44};
静态初始化在创建的时候, 不允许动静结合
int[] arr = new int[2]{11,22,33};
2. 数组元素访问
-
什么是索引(角标 下标)?
-
怎样通过索引操作数组中的元素?
-
索引 : 数组容器中, 每一个元素位置的[编号]
编号从0开始, 逐个增长 -
操作格式 : 数组名[索引];
-
3. 内存分配
- Java内存中分为那几块区域?
- 数组在内存中创建的过程?
栈内存 : [方法]运行时所进入的内存, 变量都存放在这块内存当中. 堆内存 : new出来的东西, 都会进入堆内存 堆内存中产生的数据, 都会存在[地址值] Scanner sc = new Scanner(System.in); Random r = new Random(); int[] arr = new int[3]; 方法区 : .class(字节码)文件加载时, 进入的内存. Demo.java -> 源文件 Demo.class -> 字节码文件 Demo.class ------ JVM 本地方法区 : 交给[操作系统]去访问[底层资源]的一些方法. 如果在源码当中, 某些功能被native所修饰, 就代表该方法会存放在本地方法区. 源码中是看不到此类方法的具体实现过程的. 寄存器 : 交给CPU去使用的.
4. 数组操作的两个小问题
数组索引越界异常
ArrayIndexOutofBoundsException : 当访问了不存在的索引时
空指针异常 :
NullPointerException : 当一个变量不再记录地址值的时候, 还想去访问堆内存的数据.
5. 数组遍历
- 什么是数组的遍历?
- 数组名.length代表的是什么?
数组的遍历, 就是通过[循环]将数组中所有的数据[取出来]
取出来 : 打印, 累加求和, 判断...
数组名.length: 动态获取数组的长度