9.数组介绍和静态初始化
数组
数组是一种容器,可以用来存储同种数据类型的多个值
数组的静态初始化
初始化:就是在内存中,为数组开辟空间,并将数据存入容器中的过程
数组的定义格式
格式1:数据类型[] 数组名
范例:int[] array
格式2:数据类型 数组名[]
范例:int array[]
注意 : 这种定义格式,定义出来的,只是数据类型的变量而已,内存中还没有创建出数组容器
数组的静态初始化格式
完整格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,......}
简化格式:数据类型[] 数组名 ={元素1,元素2,元素3,......}
例如:
public static void arrayTest2() {//完整格式int[] array = new int[]{1,25,33,44};// 简化格式int[] array1 = {1,22,33,44};//打印数组名System.out.println(array);//[I@4eec7777System.out.println(array1);//[I@3b07d329
}
注意当打印数组名时,得到的结果时[I@3b07d329
@:分割符
[:当前空间,是数组类型的
I:当前数组类型,是int类型
3b07d329:数组的十六进制内存地址
数组的元素访问
数组的访问格式:
格式:数组名[索引];
索引:索引是数组容器中空间的编号,编号从0开始,逐个+1增长
数组遍历操作
数组遍历:将数组中所有的内容取出来,取出来之后可以进行各种操作(打印,求和,判断……)
数组名.length:动态获取数组的长度(数组里面元素的个数)
数组遍历快捷键:数组名.fori
例如:打印出数组的每一个元素
public class ArrayDemo1 {public static void main(String[] args) {int[] array = {11,22,33,44,55};arrayTest1(array);}// 数组的遍历public static void arrayTest1(int[] array){for (int i = 0; i<array.length; i++){System.out.println(array[i]);}}
}
例如:求一组数据偶数的和
public class ArrayDemo1 {public static void main(String[] args) {int[] array = {11,22,33,44,55};int sum = doubleSum(array);System.out.println(sum);}//求数组中偶数和public static int doubleSum(int[] array) {int sum = 0;for (int i = 0; i < array.length; i++) {if(array[i]%2==0){sum += array[i];}}return sum;}
}
数组动态初始化
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
格式:数据类型[] 数组名 = new 数据类型[数组长度]
范例:int[] arr = new int[3];
在Java中,数组动态初始化时,会根据数组元素的类型自动赋予默认初始值。
数值类型(整数和浮点数)
byte
、short
、int
、long
:默认值为0
。float
、double
:默认值为0.0
字符类型
char
:默认值为\u0000
(Unicode空字符)。
布尔类型
boolean
:默认值为false
。
引用类型
类、接口、数组等引用类型:默认值为
null
。
int[] intArray = new int[3]; // 所有元素初始化为 0
double[] doubleArray = new double[3]; // 所有元素初始化为 0.0char[] charArray = new char[3]; // 所有元素初始化为 \u0000
boolean[] boolArray = new boolean[3]; // 所有元素初始化为 false
String[] strArray = new String[3]; // 所有元素初始化为 null
Object[] objArray = new Object[3]; // 所有元素初始化为 null
动态初始化和静态初始化数组的区别和使用场景
区别:
内存分配时机
静态初始化在编译时分配内存并赋值,数组大小固定;动态初始化在运行时通过new
关键字分配内存,大小可动态确定。
语法形式
静态初始化直接声明元素值,如 int[] arr = {1, 2, 3};
;动态初始化需指定大小,如 int[] arr = new int[3];
,元素初始值为默认值(如0、null)。
灵活性
动态初始化允许运行时确定数组长度,适用于数据量未知的场景;静态初始化适用于元素已知且固定的情况。
静态初始化的使用场景
已知初始值
当数组元素在编码阶段已确定时
常量配置
用于定义不可变的常量集合
代码简洁性
减少冗余代码,直接在声明时赋值,避免后续单独初始化。
动态初始化的使用场景
运行时确定大小
用户输入或计算得到数组长度时使用
延迟赋值
先分配内存再逐步填充数据
性能优化
大规模数据需预分配内存避免频繁扩容
选择建议
优先静态初始化:元素已知且数量较少时,提升代码可读性。
必须动态初始化:数据量依赖运行时输入或计算,或需要延迟赋值。
注意默认值:动态数组的默认值可能影响逻辑,需显式重置(如
Arrays.fill()
)。
二维数组
二维数组的定义
二维数组是由行和列组成的表格状数据结构,可以看作数组的数组。每个元素通过两个索引(行索引和列索引)访问。
二维数组的声明与初始化
静态初始化(直接赋值):
int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
动态初始化(指定行列大小):
int rows = 3, cols = 4;
int[][] grid = new int[rows][cols]; // 默认值为0
二维数组的遍历
嵌套循环遍历:
for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix[i].length; j++) {System.out.print(matrix[i][j] + " ");}System.out.println(); // 换行
}
常见操作
获取行数和列数
int rowCount = matrix.length; // 行数
int colCount = matrix[0].length; // 列数(假设为矩形数组)
锯齿数组(非矩形):
int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[]{1, 2};
jaggedArray[1] = new int[]{3, 4, 5};
应用场景
- 矩阵运算(如乘法、转置)。
- 棋盘类游戏(如围棋、扫雷)。
- 图像处理(像素矩阵)。
注意事项
- 避免越界访问(如
matrix[-1][0]
)。 - 锯齿数组需单独处理每行的长度。
- 多维数组的深层拷贝需谨慎(浅拷贝问题)。