Java数组
1、什么是数组
数组的定义
- 数组是用来存储同一种数据类型的集合,也可以说是容器。
- 数组元素可以通过数组下标访问他们。
数组的四个基本特点
- 数组的长度是固定的,数组一旦被创建,它的大小就不可以发生改变。
- 数组中的元素必须是相同类型的,不能与其他类型混在一起。
- 数组中的元素可以是任何数据类型,可以是基本类型,也可以是引用类型。
- 数组变量是引用变量,所以数组也可以看成是对象,数组中的每个元素相当于是对象的成员变量。数组本身就是对象,Java中的对象都是在堆中创建的,因此数组无论保存基本类型还是引用类型,数组对象本身都是在堆中。
2、数组的声明和创建【重点】
- 首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
dataType[] arrayName;
- 创建数组的语法,也叫初始化数组:
dataType[] arrayName = new dataType[arraySize];
- 数组元素是通过下标访问的,数组下标从
0开始,到数组长度-1结束。 - 通过
数组名.length可以获取数组长度:
array.length;
public class ArrayDemo01 {
// 变量类型 变量名 = 变量的值;
// 数组类型[] 数组名 = new 数组类型[数组大小];
public static void main(String[] args) {
int[] numbers1; //声明一个数组变量
numbers1 = new int[10]; //创建一个int类型大小为10的数组
int[] numbers2 = new int[10]; //初始化大小为10的int数组
//给数组元素赋值
numbers1[0] = 1;
numbers1[1] = 2;
numbers1[2] = 3;
numbers1[3] = 4;
numbers1[4] = 5;
numbers1[5] = 6;
numbers1[6] = 7;
numbers1[7] = 8;
numbers1[8] = 9;
numbers1[9] = 10; //不给int数组元素赋值,默认值是0
//计算所有元素的和
int sum = 0;
//获取数组长度:array.length
for (int i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
System.out.println("总和为:" + sum);
}
}
3、数组初始化及内存分析【重点】
内存分析
Java内存分析:


数组初始化
1、静态初始化
- 根据元素数量创建数组大小,是自适应的。
int[] a = {1, 2, 3};
Man[] mans = {new Man(1,1), new Man(2,2)};
2、动态初始化
- 创建数组的时候指定大小。
- 数组元素会默认初始化。
int[] a = new int[2];
a[0] = 1;
a[1] = 2;
3、数组的默认(隐式)初始化
数组是引用类型,它的元素相当于类的实例变量,他被分配空间时就已经被隐式初始化。
package com.hongcheng.array;
public class ArrayDemo02 {
public static void main(String[] args) {
//静态初始化:创建并赋值给数组
int[] a = {1, 2, 3, 4, 5};
System.out.println(a[0]);
//动态初始化:数组元素默认初始化
int[] b = new int[10]; //数组元素被隐式初始化
b[0] = 10;
System.out.println(b[0]);
System.out.println(b[1]); //默认初始化为0
}
}
4、数组的使用
- 普通的for循环
- forEach循环
- 数组在方法中作参数
- 数组作为返回值,例如:反转数组。
使用普通的for循环:
public class ArrayDemo03 {
public static void main(String[] args) {
int[] arrays = {1, 2, 3, 4, 5};
//打印数组的所有元素
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]);
}
System.out.println("==============");
//计算所有元素的和
int sum = 0;
for (int i = 0; i < arrays.length; i++) {
sum += arrays[i];
}
System.out.println("sum = " + sum);
System.out.println("==============");
//找出数组中最大元素
int max = arrays[0]; //暂时认为数组第一个元素是最大元素
//从第二个开始到最后,依次比较,大的代替小的,最后的一定是最大的
for (int i = 1; i < arrays.length; i++) {
if (arrays[i] > max) {
max = arrays[i];
}
}
System.out.println("max = " + max);
}
}
使用forEach循环,数组在方法中作参数,数组作为返回值:
public class ArrayDemo04 {
public static void main(String[] args) {
int[] arrays = {1, 2, 3, 4, 5};
//遍历数组
for (int array : arrays) {
System.out.println(array);
}
int[] reverse = reverse(arrays);
printArray(reverse);
}
//打印数组所有元素的方法
public static void printArray(int[] arrays) {
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i] + " ");
}
}
//反转数组
public static int[] reverse(int[] arrays) {
int[] result = new int[arrays.length];
//反转操作
for (int i = 0, j = result.length - 1; i < arrays.length; i++, j--) {
result[j] = arrays[i];
}
return result;
}
}
二维数组
-
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,它的每一个元素都是一个一维数组。
-
创建二维数组
int[][] a = new int[5][2];
这个二维数组表示五行两列。

多维数组怎么使用?
package com.hongcheng.array;
public class ArrayDemo05 {
public static void main(String[] args) {
int[] array1 = {1, 2, 3, 4, 5}; //一维数组
/*
[5][2]
1,2 array[0]
2,3 array[1]
3,4 array[2]
4,5 array[3]
5,6 array[4]
*/
int[][] array2 = {{1,2}, {2,3}, {3,4}, {4,5}, {5,6}}; //二维数组,静态初始化方式
// printArray(array2[0]);
System.out.println(array2[0][0]); //1
System.out.println(array2[0][1]); //2
//获取数组长度
System.out.println(array1.length); //一维数组的长度:5
System.out.println(array2[0].length); //二维数组的长度:2
//遍历二维数组的所有元素
for (int i = 0; i < array2.length; i++) {
for (int j = 0; j < array2[i].length; j++) {
System.out.println(array2[i][j]);
}
}
}
//打印数组所有元素的方法
public static void printArray(int[] arrays) {
for (int i = 0; i < arrays.length; i++) {
if (i == arrays.length-1) { //美化格式
System.out.print(arrays[i]);
} else { //美化格式
System.out.print(arrays[i] + ",");
}
}
System.out.println();
}
}
5、Arrays类
-
数组的工具类 java.util.Arrays
-
可以查看JDK文档了解如何使用 Arrays工具类
-
Arrays类中的方法都是 static修饰的静态方法,在使用的时候可以直接使用
类名.方法名进行调用,而不需要使用 对象.方法名 来调用。 -
常用方法:
- 给数组填充值:通过 fill() 方法填充数组。
- 比较数组元素:通过 equals() 方法比较数组元素的值是否相等。
- 对数组排序:通过 sort() 方法给数组元素排序,按升序。
- 查找数组元素:通过 binarySearch() 方法能对有序数组进行二分查找。
- 打印数组元素:通过 toString() 方法把数组元素按字符串输出。
package com.hongcheng.array;
import java.util.Arrays;
/*
使用 Arrays工具类的常用方法
*/
public class ArrayDemo06 {
public static void main(String[] args) {
int[] a = {1212, 32, 43,1234,5456,23};
System.out.println(a); //a是一个引用变量,存放数组的内存地址[I@610455d6
//打印数组元素Arrays.toString()
System.out.println(Arrays.toString(a)); //[1212, 32, 43, 1234, 5456, 23]
//对数组元素排序,按升序
Arrays.sort(a);
System.out.println(Arrays.toString(a)); //[23, 32, 43, 1212, 1234, 5456]
//给数组赋值,填充数组
Arrays.fill(a,0); //数组所有元素填充0
System.out.println(Arrays.toString(a)); //[0, 0, 0, 0, 0, 0]
Arrays.fill(a, 1, 3, 1); //从下标1开始填充不包括3,即1,2
System.out.println(Arrays.toString(a)); //[0, 1, 1, 0, 0, 0]
}
}
6、数组边界
-
数组下标的合法区间是:[0, length-1],如果越界就会报错。
-
ArrayIndexOutOfBoundsException:数组下标越界异常!
7、总结
- 数组是存储同一种数据类型的集合。
- 数组也是对象,数组元素相当于对象的成员变量。
- 数组长度是固定的,不可修改的,如果下标越界会报异常。

浙公网安备 33010602011771号