目录前言一、初识数组1. 数组的定义2. 数组的核心特点必考3. 数组的声明与初始化1数组声明语法2静态初始化3动态初始化4. 数组默认初始化值规则二、数组元素访问与修改1. 数组索引规则2. 元素访问与修改代码实战三、数组长度与越界异常1. 数组长度属性 length2. 数组越界异常演示四、数组遍历开发最常用1. 普通for循环遍历可操作索引、可修改元素2. 增强for循环只读遍历简洁高效五、多维数组二维数组为主1. 二维数组概念2. 二维数组初始化与遍历六、数组常用工具类操作Arrays1. 数组排序 Arrays.sort()2. 数组复制两种方式3. 二分查找 binarySearch七、数组致命缺点与动态数组解决方案1. 数组致命短板2. 动态替代方案ArrayList八、全文总结前言数组是 Java 中最基础、最重要的数据结构也是集合、算法、数据存储的底层基石。相比于变量只能存储单个数据数组可以批量存储一组相同类型的数据。很多初学者对数组的长度不可变、索引机制、内存特性、遍历方式、数组工具类操作理解模糊导致后续集合、算法刷题、业务代码频繁踩坑。本文从零完整讲解 Java 数组全套知识点包含定义特点、初始化方式、默认值、索引操作、遍历、多维数组、数组常用工具类操作及数组与 ArrayList 的区别搭配全套可运行代码适合零基础入门与面试复习。一、初识数组1. 数组的定义数组是存储一组相同数据类型、连续内存空间的数据结构。数组中每一个数据称为元素元素通过索引下标进行访问。简单理解数组就是批量变量的容器解决单个变量只能存一条数据的问题。2. 数组的核心特点必考长度固定不可变数组一旦初始化开辟内存长度永久固定无法动态扩容缩容类型统一数组内所有元素必须是相同数据类型内存连续元素在内存中连续存储查询速度极快增删需要移动元素索引从零开始有效索引范围0 ~ 长度-1正因内存连续的特性数组查询快、增删慢。删除/插入中间元素时后面所有元素需要移位性能损耗大且数组没有真正删除元素的方法只能覆盖赋值。3. 数组的声明与初始化Java 数组分为静态初始化和动态初始化。1数组声明语法// 标准写法推荐 数据类型[] 数组名; // 老式写法不推荐 数据类型 数组名[];2静态初始化直接给出元素值系统自动识别数组长度。适用于已知具体元素的场景。public class ArrayInitDemo { public static void main(String[] args) { // 静态初始化 int[] arr {11,22,33,44,55}; String[] strArr {Java,C,Python}; System.out.println(arr.length); System.out.println(strArr.length); } }3动态初始化只指定数组长度系统自动分配默认值。适用于只知道数量、未知元素的场景。public class ArrayNewDemo { public static void main(String[] args) { // 动态初始化长度为5的int数组 int[] arr new int[5]; // 长度为3的字符串数组 String[] strArr new String[3]; } }4. 数组默认初始化值规则动态初始化后数组会自动赋予默认值无需手动赋值基本数值类型byte/short/int/long默认0浮点类型float/double默认0.0布尔类型 boolean默认false字符类型 char默认\u0000空字符引用类型String、对象默认null二、数组元素访问与修改1. 数组索引规则数组索引从0开始若数组长度为 n索引范围0 ~ n-1。索引小于0 或 索引 数组长度会抛出ArrayIndexOutOfBoundsException数组越界异常。2. 元素访问与修改代码实战public class ArrayOperateDemo { public static void main(String[] args) { int[] arr {10,20,30,40}; // 根据索引访问元素 System.out.println(第一个元素 arr[0]); System.out.println(第二个元素 arr[1]); // 修改元素 arr[0] 99; arr[2] 666; System.out.println(修改后第一个元素 arr[0]); System.out.println(修改后第三个元素 arr[2]); } }三、数组长度与越界异常1. 数组长度属性 length数组提供只读属性数组名.length可以获取当前数组元素个数。int[] arr {1,3,5,7,9}; System.out.println(数组长度 arr.length);2. 数组越界异常演示public class ArrayOutDemo { public static void main(String[] args) { int[] arr {10,20,30}; // 有效索引0、1、2 // arr[3] 超出范围运行报错 // System.out.println(arr[3]); } }开发规范遍历、取值必须保证索引在合法区间避免数组越界。四、数组遍历开发最常用1. 普通for循环遍历可操作索引、可修改元素public class ForLoopDemo { public static void main(String[] args) { int[] arr {11,22,33,44,55}; for (int i 0; i arr.length; i) { System.out.println(索引iarr[i]); } } }2. 增强for循环只读遍历简洁高效public class ForEachDemo { public static void main(String[] args) { int[] arr {11,22,33,44,55}; // 直接取出每一个元素无索引 for (int num : arr) { System.out.println(num); } } }场景区别需要索引、修改元素用普通for单纯遍历取值用增强for。五、多维数组二维数组为主1. 二维数组概念二维数组本质是存放一维数组的数组常用于表格数据、矩阵、棋盘等场景。2. 二维数组初始化与遍历public class TwoArrayDemo { public static void main(String[] args) { // 二维数组静态初始化 int[][] arr {{1,2,3},{4,5,6},{7,8,9}}; // 双层循环遍历 for (int i 0; i arr.length; i) { for (int j 0; j arr[i].length; j) { System.out.print(arr[i][j] ); } System.out.println(); } } }六、数组常用工具类操作ArraysJava 提供java.util.Arrays工具类封装了数组复制、排序、查找、打印等高频方法。1. 数组排序 Arrays.sort()import java.util.Arrays; public class ArraySortDemo { public static void main(String[] args) { int[] arr {5,2,9,1,6}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); } }2. 数组复制两种方式import java.util.Arrays; public class ArrayCopyDemo { public static void main(String[] args) { int[] oldArr {1,2,3,4,5}; // 方式1Arrays.copyOf 常用 int[] newArr1 Arrays.copyOf(oldArr,oldArr.length); // 方式2System.arraycopy 底层高效 int[] newArr2 new int[oldArr.length]; System.arraycopy(oldArr,0,newArr2,0,oldArr.length); System.out.println(Arrays.toString(newArr1)); } }3. 二分查找 binarySearch注意数组必须先排序才能二分查找import java.util.Arrays; public class ArraySearchDemo { public static void main(String[] args) { int[] arr {10,20,30,40,50}; int index Arrays.binarySearch(arr,30); System.out.println(目标元素索引index); } }七、数组致命缺点与动态数组解决方案1. 数组致命短板长度固定不适合数据动态增减场景增删元素效率低需要移位覆盖没有封装增删改查方法原生操作繁琐2. 动态替代方案ArrayList为了解决数组不可变的问题Java 提供ArrayList 动态数组底层基于数组封装具备自动扩容、动态长度内置 add/remove/set/get 丰富方法业务开发 99% 场景替代原生数组八、全文总结1. 数组是固定长度、同类型、连续内存的数据结构查询快、增删慢2. 数组分为静态初始化、动态初始化拥有统一默认值机制3. 通过索引访问元素索引越界会直接报错4. 遍历分为普通for可改元素和增强for只读遍历5. Arrays工具类可快速完成排序、复制、查找、打印6. 原生数组长度不可变业务开发优先使用 ArrayList 动态数组。最后一句欢迎各位留言交流以及批评指正如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞收藏支持一下。如果在学习的过程中有什么疑问欢迎大家在评论区向我提出。