
哈喽大家好欢迎继续收听Java入门系列播客上一期我们学完了函数学会了封装代码、提升复用性。今天迎来新的核心知识点——数组。如果说变量只能存放单个数据那数组就是用来批量存储同类型数据的容器也是日常开发、面试的高频考点话不多说我们正式开始。首先来看数组的基础概念。数组可以一次性存储多个相同类型的数据还能对整组数据统一操作。使用数组分为两大步先声明数组再分配内存空间。推荐声明写法是 数据类型[] 数组名 当然也有其他写法大家了解即可。分配空间使用 数组名 new 数据类型[长度] 括号里的数字代表数组能存放多少个元素。数组存取数据依靠下标下标从0开始最大下标等于数组长度减一。存数据格式是 数组名[下标] 值 取数据直接写 数组名[下标] 。这里一定要注意一个经典报错如果下标超出合法范围运行时会抛出数组下标越界异常写代码时一定要多加留意。想要遍历数组所有元素最常用的就是循环。结合 数组名.length 获取数组长度配合for循环就能逐个访问每一个元素这也是数组最基础、使用最多的操作。另外数组在创建后会自带默认初始值整数类型默认0小数默认0.0布尔类型默认false字符是空字符引用类型统一为null这个规则需要记牢。接下来介绍数组的多种初始化方式。第一种声明和分配空间一步完成第二种、第三种是静态初始化直接在大括号里写出元素值数组长度由元素个数决定。这里有一个易错点简写格式 {元素} 必须和数组声明写在同一行拆分书写会直接报错。聊完基础用法我们来讲数组内存原理这也是本节课的难点。数组在内存中占用连续的空间而数组名本身保存的是数组内存的首地址。计算机依靠首地址加下标快速定位到对应元素这也是下标从0开始的原因为了提升寻址效率。还有一个重要区别基本数据类型变量赋值传递的是真实数值而两个数组变量相互赋值传递的只是内存地址两个变量会指向同一个数组空间。实际开发中经常会遇到原有数组空间不够用的情况这就需要数组扩容。核心思路分三步先创建一个长度更大的新数组一般扩容为原数组2倍再把原数组元素全部复制到新数组最后让原数组引用指向新数组。这里给大家三种复制方式第一种是手写循环逐个赋值第二种使用系统方法 System.arraycopy 灵活指定拷贝起始位置和长度第三种调用工具类 Arrays.copyOf 一行代码就能完成数组复制与扩容日常开发最常用。下面我们认识一个拓展知识点——可变长参数它是JDK5推出的特性。当函数不确定接收多少个同类型参数时就可以使用可变长参数语法是 数据类型… 变量名 。它在底层会自动转换成数组所以函数内部可以直接当作数组遍历使用。同时有两条语法硬性规则一个函数里最多只能有一个可变长参数并且它必须放在所有形参的最后面。合理使用可变长参数能让代码变得更加灵活。数组相关的排序算法是面试重点我们主要讲三种。第一种是冒泡排序核心逻辑是相邻元素两两比较大的元素逐步向后移动。外层循环控制总轮数内层循环控制每一轮的对比次数。第二种是选择排序固定一个位置的元素依次和后面所有元素对比把较小的数换到前面。如果不想手写排序逻辑也可以直接调用工具方法 Arrays.sort(数组名) 底层使用高效的快速排序项目开发中普遍使用这种方式。最后我们简单了解二维数组。可以把它理解成“数组里面再存放数组”分为行和列行标、列标同样从0开始。获取行数用 数组名.length 获取某一行的列数用 数组名[行标].length 。二维数组也支持多种初始化写法同时还有不规则二维数组也就是每一行的元素个数不相同。需要注意定义二维数组时可以只指定行数但不能只指定列数。语气放缓进入总结以上就是数组整章节的全部内容了。从一维数组的声明、赋值、遍历到内存原理、扩容、可变参数、排序再到二维数组知识点层层递进。数组是后面集合、算法学习的基础大家一定要多敲代码练习吃透下标、地址、排序这些核心内容。下一期我们将进入面向对象的学习这也是Java语言的核心思想。本期播客就到这里我们下期再见