章节导读
本章定位:深入理解 Java 数组的底层原理、内存模型与实战应用。从一维数组的三种初始化方式到多维数组的"数组的数组"本质,再到
java.util.Arrays工具类的核心 API,构建完整的数组知识体系。本章是后续学习集合框架(Collection)和算法课程的重要前置基础。
飞翔科技场景导入
飞翔科技的学生成绩管理系统需要处理整个年级 5000 人的成绩数据。小崔的第一版代码声明了 5000 个变量——
int score1, score2, score3...——写到第 200 个就崩溃了。白歌看了一眼代码,默默写下
int[] scores = new int[5000];,然后说:"这就是数组的力量。但别高兴太早——Arrays.asList()对基本类型数组的行为会让你怀疑人生。"孔蓝补充:"上周生产环境崩了一次,就是因为
scores[5000]越界访问,ArrayIndexOutOfBoundsException没有 catch。"
知识图谱
各文件学习路线
| 文件 | 核心内容 | 难度 | 建议学时 |
|---|---|---|---|
| 一维数组.md | 声明、初始化、遍历、length、越界/空指针异常 | ★★☆ | 2 |
| 多维数组.md | 二维数组、不规则数组、三维数组、内存布局 | ★★★ | 1.5 |
| Arrays工具类.md | toString/sort/binarySearch/copyOf/asList陷阱 | ★★☆ | 1.5 |
前置知识
| 知识点 | 掌握程度 | 说明 |
|---|---|---|
| 基本数据类型 | 必须 | 数组元素的数据类型基础 |
| for 循环语法 | 必须 | 数组遍历的基础手段 |
| JVM 内存分区 | 建议 | 理解数组内存模型的关键 |
学习目标
- 理解数组在 JVM 内存中的连续存储模型,能画出数组内存布局图
- 掌握一维数组的三种初始化方式及其适用场景
- 诊断并修复
ArrayIndexOutOfBoundsException和NullPointerException - 理解二维数组是"数组的数组",能写出不规则数组
- 掌握
Arrays.toString()、sort()、binarySearch()等核心 API - 避开
Arrays.asList()的陷阱:基本类型数组与对象数组的区别
面试高频考点
| 考点 | 出现频率 | 典型问题 |
|---|---|---|
| 数组内存模型 | 80% | 画出 int[] arr = new int[3] 的内存图 |
length vs length() | 75% | 数组的 length 是属性还是方法? |
Arrays.asList() | 70% | Arrays.asList(new int[]{1,2}) 得到的 size 是多少? |
| 数组的不可变性 | 65% | 数组长度能改吗?扩容怎么实现? |
白歌的提醒:数组看似简单,但它是理解 JVM 内存模型的最佳入口。数组中"连续存储"、"零下标"、"不可变长度"这些特性,是后续学习 ArrayList、HashMap 等容器类的基础。请务必重视本章的每一个内存图。
准备好了吗?让我们从一维数组的定义和初始化开始。