文章目录
- 一、数组的定义
- 1.1 静态初始化数组
- 1.2 动态初始化数组
- 1.3 数组的访问
- 二、数组的遍历
- 三、数组的内存图 ★
- 3.1 Java 的内存分配
- 3.2 数组的内存图
- 3.3 两个数组变量指向同一个数组对象
- 四、数组使用的常见问题
- 补充:随机数 Random 类
一、数组的定义
数组就是一个容器,用于在程序中存储一批同种类型的数据。
1.1 静态初始化数组
使用场景:一旦确定了数据的具体值,我们就用这种方式存储批量数据。
1.2 动态初始化数组
使用场景:适合做一开始不能确定具体数据的情况。先定义数组,后赋值数据进去。
动态初始化数组的元素存在默认值:
注:数据类型[] 数组名称
可以写成 数据类型 数组名称[]
。
1.3 数组的访问
- 格式:
数组名称[索引]
- 取值:int data = arr[1];
- 赋值:arr[1] = 222;
- 长度:arr.length
举例:
// 静态初始化
int[] count1 = new int[]{ 1, 2 ,3};
int[] count2 = { 4, 5, 6};
String[] names1 = new String[]{"张三", "李四"};
String[] names2 = {"张三", "李四"};
// 数组变量名存储的时数组在内存中的地址,数组是引用类型
System.out.println(names1); // [Ljava.lang.String;@4eec7777
// 动态初始化
int[] arr = new int[10];
System.out.println(arr[1]); // 默认值 0
System.out.println(arr); // [I@3b07d329
注:由于 String 是引用类型,数组中的每个位置存储的都是地址。
二、数组的遍历
逐一的访问数据,如:
int[] ages = {10, 30, 40, 50};
for (int i = 0; i < ages.length; i++) {
System.out.println(ages[i]);
}
三、数组的内存图 ★
3.1 Java 的内存分配
Java 内存主要被划分为:方法区、栈内存、堆内存、本地方法栈、寄存器。其中,方法区、栈内存、堆内存最为主要。
方法区: 放 Class 文件的。
栈内存: 运行的方法,main 方法,定义的变量。
堆内存: new 出来的对象,都在堆内存中。
3.2 数组的内存图
数组是引用类型,数组变量名中存储的是数组在内存中的地址。
数组变量是在栈内存,存储的地址是指向堆内存的一片区域,如:
3.3 两个数组变量指向同一个数组对象
四、数组使用的常见问题
- 不要访问超过数组最大索引,否则出现数组访问越界异常 ArrayIndexOutOfBoundsException。
- 空指针异常问题:
内存原理如下:int[] arr = null; System.out.println(arr); // null System.out.println(arr.length); // 空指针异常 NullPointerException
补充:随机数 Random 类
- 作用: 产生一个随机数
- 步骤:
1、导包(自动做的:)import java.util.Random;
2、创建随机数对象:Random r = new Random();
3、开始得到随机数 :int data = r.nextInt(10); // 0 - 9
- 生产指定区间的随机数:
- 减加法
1 - 10 ==> (0 - 9) + 1
int data = r.nextInt(10) + 1;
- 生成指定区间的随机数:
r.nextInt(10 , 31);
- 减加法
文章参考:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)