java中的数组
数组的定义
java中数据又两种定义格式。
- 第一种 数据类型[] 变量名 (推荐使用)
int[] arr;
byte[] arr;
double[] arr; - 第二种 数据类型 变量名[]
int arr[];
byte arr[];
double[] arr;
数组的初始化
java中的数组初始化分为两种, 一种是动态初始化, 另一种是静态初始化
索引
数组中元素的编号, 从0开始, 可以用来访问数组中的元素格式:arr[0], arr[1];
动态初始化
java数组的动态初始化,在初始化时给定数组长度, 由系统为元素默认赋值。
java的动态初始化格式 数据类型[] 变量名 = new 数据类型[长度];
public class ArrayInit01 {
public static void main(String[] args) {
int[] arr = new int[3];
// int: 说明数组中的元素是int类型的
// []: 说明这是一个数组
// arr: 数组的名称
// new: 为数组申请内存空间
// int: 说明数组元素是int类型
// [3]: 说明数组的长度是3
System.out.println(arr); // 指针
System.out.println(arr[0]); // 0
System.out.println(arr[1]); // 0
System.out.println(arr[2]); // 0
}
}
动态初始化,各数据类型系统默认赋值
- 整数型(byte, short, int): 0
- 浮点型(float, double): 0.0
- 字符型(char): 空串
- 布尔型(boolean): false
- 引用类型: null
静态初始化
在创建数组时, 直接将数组中的元素确定。
java中数组静态初始化的格式: int[] arr = {1,2,3,4};
public class ArrayInit02 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4};
System.out.println(arr[0]); // 1
System.out.println(arr[1]); // 2
System.out.println(arr[2]); // 3
System.out.println(arr[3]); // 4
}
}
内存分配
程序编写好之后是放在硬盘中, 如果程序要执行,必须放进内存中, 运行完之后会清空内存。JVM(java虚拟机)要运行程序, 必须对内存进行空间管理和分配。
目前只需要掌握栈内存和堆内存的概念。
1.栈内存
方法运行时使用的内存,比如main方法运行,进入方法栈中执行。基本数据类型都直接存储在栈内存中。
2.堆内存
存储对象或者数组,new来创建的,都存储在堆内存。
数组内存的结构
public class ArrayStorage {
public static void main(String[] args) {
// new 申请堆内存空间。分配指针,赋值到arr变量
int[] arr = new int[3]
// arr 变量在栈内存空间只存储了指针
System.out.println(arr); // 指针
/*
访问数组中的元素步骤:
1. 通过arr变量的指针访问到堆内存空间
2. 同过索引访问到元素
*/
System.out.println(arr[0]);
/*
将arr赋值给arr2, 是将arr的指针赋值给arr2
此时arr和arr2指向同一个堆内存空间。
改变arr2中元素的内容会同时改变arr的元素
*/
int[] arr2 = arr;
arr2[0] = 999;
arr2[3] = [999]
System.out.println(arr[0]); // 999
System.out.println(arr[3]); // 999
}
}
解释不够清楚, 可以百度找点图来辅助理解。
数组常见的小问题
- 索引越界: 使用了数组中不存在的索引。ArrayIndexOutOfBoundsException
- 空指针异常: 数组为null ,指针在堆中找不到空间。NullPointerException
public class ArrayQuestion {
public static void main(String[] args) {
int[] arr = {1,2,3,4};
// System.out.println(arr[5]); 报错
arr = null;
System.out.println(arr[0]); // 报错
}
}
数组的常见操作
- 遍历数组: 访问数组中所有的元素, 通常使用循环来完成。 数组名.length: 数组中元素的个数。
- 求最大值: 获取数组中最大的数。
public class ArrayTest {
public static void main(String[] args) {
int[] arr = {23,43,77,11};
// 使用for循环遍历数组, 输出所有数组元素
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 判断出数组中最大的数
int max = 0;
for (int j = 0; j < arr.length; j++) {
if (arr[j] > max) {
max = arr[j];
}
}
System.out.println("数组中最大的数是: " + max);
}
}