别把数组当语法糖,内存图才是这一季的硬骨头

很多转岗或自学的同学在第7季之前写代码挺顺,一到数组就卡壳:能照着敲出遍历代码,但一报“越界”或“空指针”就两眼一抹黑,不知道错在哪。这门课解决的核心问题不是教你写数组语法,而是补上“数组在内存里长什么样”这块底板。数组本身是个容器,但它的真正难点在于它牵出了栈和堆的关系、引用数据类型的存储方式、值传递与引用传递的区别。如果你只会敲int[] arr却画不出arr在栈里存的是什么、堆里存的是什么,后面的面向对象你会学得更痛苦。这门课适合已经掌握流程控制和方法基础的同学,如果你连for循环都写不顺,建议先退回去补,别硬啃。

建议先啃内存机制,再碰算法和工具类

资料顺序看着是按知识点铺开的,但我不建议你从头到尾顺着看。第一遍先把“数组基本用法”和“动态赋值”过一遍,确认自己能独立写出遍历和赋值代码,这部分是地基,看不懂后面的全是空中楼阁。接着直接跳到“栈和堆”那一节,重点啃“基本数据类型和引用数据类型在内存中的存储方式”以及“值传递和引用传递”。这几节是整季的分水岭:看懂了,你就明白为什么方法里改数组元素原数组会变、改基本类型却不变;没看懂,你以后调Bug只能靠猜。看完内存机制,再回头碰“二维数组”和“冒泡排序”。冒泡排序是这门课里第一个正经算法,别只背代码,自己拿纸画一遍每趟比较的过程,搞清楚内层循环边界为什么是length-1-i。最后的Arrays工具类和不定长参数属于实用补充,知道有这些工具能省事就行,不用死记方法签名。

看完拿什么检验自己:三个问题与配套练习

这门课每讲完一块都有配套练习,练习不是让你看老师敲,是你自己先写、写不出再对照。资料里的练习题别跳过,尤其是“操作数组”那节,它综合了遍历、赋值和逻辑处理,能写出来才算真会。检验学习效果,问自己三个问题:第一,画图解释int a = 10和int[] arr = new int[3]在内存里分别怎么存,栈和堆各有什么?第二,一个方法接收一个数组参数,方法内修改元素,方法外原数组变不变?为什么?如果传的是int呢?第三,手写冒泡排序,能说清每趟在干什么、总共比较多少趟。这三个问题答得利索,说明你没把数组当语法糖糊弄过去。学完这季,你应该能独立写一段代码:定义数组、动态接收输入存进去、用方法处理、排序后打印,并且清楚每一步数据在内存里的去向。做到这步,才算把数组的底子打牢,后面碰集合框架时你会感谢现在啃下来的这些内存图。

课程目录

1 数组简介 (06:18)
2 数组基本用法1 (11:08)
3 数组基本用法2 (07:27)
4 动态赋值 (06:08)
5 增强for循环 (09:58)
6 默认值 (04:16)
7 常见错误 (05:04)
8 练习:数组的用法 (10:28)
9 栈和堆 (04:48)
10 基本数据类型和引用数据类型 (07:26)
11 基本数据类型在内存中的存储方式 (06:36)
12 引用数据类型在内存中的存储方式 (17:48)
13 值传递和引用传递 (15:30)
14 二维数组 (23:50)
15 练习:二维数组 (09:44)
16 冒泡排序 (25:54)
17 Arrays工具类 (05:59)
18 不定长参数1 (13:09)
19 不定长参数2 (02:07)
20 练习:操作数组 (14:24)