Java数组

2148 字
11 分钟
Java数组

一、认识数组#

1. 什么是数组#

数组就是一个容器,用来存一批同种类型的数据的。

比如:想要存储 20,10,80,60,90 这些数据。我们可以把代码写成这样

int[] array = {20,10,80,60,90};

比如:想要存储 “牛二”,“西门”,“全蛋” 这些数据。我们可以把代码写成这样

String[] names = {"牛二", "西门", "全蛋"};

二、数组的定义和访问#

数组有两种初始化的方式,一种是静态初始化、一种是动态初始化。我们先用静态初始化来学习数组的操作。

2.1 数组的静态初始化#

所谓静态初始化指的是:在定义数组时直接给数组中的数据赋值。

1. 静态初始化标准格式:

数据类型[] 变量名 = new 数据类型[]{元素1,元素2,元素3};

按照格式定义int类型、double类型数组

//定义数组,用来存储多个年龄
int[] ages = new int[]{12, 24, 36}
//定义数组,用来存储多个成绩
double[] scores = new double[]{89.9, 99.5, 59.5, 88.0};

2. 静态初始化简化格式

Java语言的设计者为了简化定义数组的写法,还为静态初始化提供了一种简化写法

数据类型[] 变量名 = {元素1,元素2,元素3};

使用简化格式定义int类型、double类型数组

//定义数组,用来存储多个年龄
int[] ages = {12, 24, 36}
//定义数组,用来存储多个成绩
double[] scores = {89.9, 99.5, 59.5, 88.0};

3. 注意哟!!

  • 定义数组时,数据类型[] 数组名 也可写成 数据类型 数组名[]
//以下两种写法是等价的。但是建议大家用第一种,因为这种写法更加普遍
int[] ages = {12, 24, 36};
int ages[] = {12, 24, 36}

4. 数组在计算机中的基本原理

我们知道数组是怎么定义的之后,那么接下来看一下数组在计算机中的基本原理。

我们以int[] ages = {12,24,36};这句话为例,看一下这句话到底在计算机中做了那些事情。

  • 首先,左边int[] ages 表示定义了一个数组类型的变量,变量名叫ages
  • 其次,右边{12,24,36}表示创建一个数组对象,你完全可以把它理解成一个能装数据的东西。这个对象在内存中会有一个地址值[I@4c873330,每次创建一个数组对象都会有不用的地址值。
  • 然后,把右边的地址值[I@4c873330赋值给左边的ages变量
  • 所以,ages变量就可以通过地址值,找到数组这个东西。

数组内存原理
数组内存原理

2.2 数组的元素访问#

这里所说的访问,意思就是获取中数组中数据的值、或者给数组中的数据赋值。

数组中存储的数据我们叫做元素;而且数组中的每一个元素都有一个编号与之对应,我们把这个编号叫做索引,这个索引是从0依次递增的整数。如下图所示

数组索引
数组索引

要想访问数组中的元素,格式如下

//数组名可以找到数组对象的地址,再通过索引就可以定位到具体的元素了
数组名[索引]

接下来用代码来演示一下

//索引: 0 1 2
int[] arr = {12, 24, 36};
// 1、访问数组的全部数据
System.out.println(arr[0]); //12
System.out.println(arr[1]); //24
System.out.println(arr[2]); //36
//下面代码没有3索引,会出现ArrayIndexOutOfBoundsException 索引越界异常
//System.out.println(arr[3]);
// 2、修改数组中的数据
arr[0] = 66;
arr[2] = 100;
System.out.println(arr[0]); //66
System.out.println(arr[1]); //24
System.out.println(arr[2]); //100

除了访问数组中的元素,我们可以获取数组中元素的个数,后面我们统称为数组的长度。

// 3、访问数组的元素个数:数组名.length
System.out.println(arr.length);
// 技巧:获取数组的最大索引: arr.length - 1(前提是数组中存在数据)
System.out.println(arr.length - 1);
int[] arr2 = {};
System.out.println(arr2.length - 1);

2.3 数组的遍历#

所谓遍历意思就是将数组中的元素一个一个的取出来。

学习了数组中元素的访问,访问元素必须用到索引,如下列代码。

int[] ages = {12, 24, 36};
System.out.println(ages[0]);
System.out.println(ages[1]);
System.out.println(ages[2]);

但是,如果数组中有很多很多元素,索引靠自己一个一个数肯定是不行的!我们可以使用for循环从0开始一直遍历到长度-1的位置,就可以获取所有的索引了。

当你获取到每一个索引,那么每一个元素不就获取到了吗?上代码吧

int[] ages = {12, 24, 36};
for (int i = 0; i < ages.length; i++) {
// i的取值 = 0,1,2
System.out.println(ages[i]);
}

2.4 数组静态初始化案例#

学习完数组的静态初始化之后,接下来我们做一个练习题来巩固一下。

需求:某部门5名员工的销售额分别是:16、26、36、6、100,请计算出他们部门的总销售额。
需求分析:
1.看到有16、26、36、6、100这5个数据数据,而且数据值很明确;
1)想到,可以使用数组静态初始化把这5个数据存起来
2.请计算出他们部门的总销售额(这不就是求数组中数据的和吗?)
2)必须先将数组中所有的元素遍历出来
3)想要求和,得先有一个求和变量sum
4)再将每一个元素和求和变量sum进行累加(求和思想)

按照分析的思路来写代码

// 1、定义一个数组存储5名员工的销售额
//索引 0 1 2 3 4
int[] money = {16, 26, 36, 6, 100};
// 3、定义一个变量用于累加求和
int sum = 0;
// 2、遍历这个数组中的每个数据。
for (int i = 0; i < money.length; i++) {
// i = 0 1 2 3 4
sum += money[i];
}
System.out.println("员工的销售总额:" + sum);

2.5 数组的动态初始化#

刚才我们初始化数组时,都是直接将元素写出来。但是还有另一个初始化数组的方式叫 动态初始化

动态初始化不需要我们写出具体的元素,而是指定元素类型和长度就行。格式如下

//数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3];

下面是动态初始化数组的原理图。我们发现int[] arr 其实就是一个变量,它记录了数组对象的地址值,而且数组中的元素默认值是0。

数组动态初始化
数组动态初始化

注意:

使用动态初始化定义数组时,根据元素类型不同,默认值也有所不同。

数组默认值
数组默认值

2.6 数组动态初始化案例#

案例需求:
某歌唱比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕后立即输出平均分做
选手得分
需求分析:
1.需要录入6名评委的分数,可以用一个数组来保存。
因为在评委没有录入分数之前,还不确定数组中应该存哪些数据。
所以可以使用数组的动态初始化
2.遍历数组中的每一个位置,并录入分数,将分数存入数组中
3.遍历数组中的每一个元素,对元素求和

代码如下

// 1、定义一个动态初始化的数组,负责后期存储6个评委的打分。
double[] scores = new double[6];
Scanner sc = new Scanner(System.in);
// 2、遍历数组中的每个位置,录入评委的分数,存入到数组中去
for (int i = 0; i < scores.length; i++) {
// i = 0 1 2 3 4 5
System.out.println("请您输入当前第" + (i + 1) +"个评委的分数:");
double score = sc.nextDouble();
scores[i] = score;
}
// 3、遍历数组中的每个元素进行求和
double sum = 0;
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
}
System.out.println("选手最终得分是:" + sum / scores.length);

总结#

数组是Java中最基础的数据结构,掌握数组的定义、初始化、访问和遍历是学习Java的必修课。通过静态初始化和动态初始化两种方式,我们可以灵活地处理各种数据存储需求。记住:

  • 静态初始化:数据已知,直接赋值
  • 动态初始化:数据未知,先分配空间
  • 索引从0开始:第一个元素的索引是0
  • 遍历用for循环:从0到length-1
  • 默认值不同:数值类型默认0,布尔默认false,引用类型默认null

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Java数组
https://v7w.cn/posts/java-arrays/
作者
枫诀宝贝
发布于
2026-04-01
许可协议
CC BY-NC-SA 4.0
相关文章 智能推荐
1
Java数组元素反转:详解双指针交换算法
Java 本文深入解析Java数组元素反转的核心逻辑。通过图解"借用第三方变量"的数据交换原理,详细演示如何利用双指针(首尾索引)技术高效实现数组倒序。文中包含完整的代码实现与步骤分析,助你掌握数组操作中经典的交换算法。
2
JAVA常用结构语句
Java 本文详解Java核心控制流语句,涵盖for、while、do…while循环与if…else、switch case条件判断,并介绍增强for循环及跳转语句,助你掌握高效代码构建逻辑。
3
Java方法详解:从入门到实战,掌握代码复用的核心
Java 本文全面解析Java方法(Method)的核心概念与实战应用。内容涵盖方法的定义、调用、参数传递机制(值传递与引用传递)及返回值处理,深入剖析方法重载(Overloading)的规则与最佳实践。此外,文章还通过实战案例演示了方法的内存执行流程,并介绍了Arrays工具类与可变参数的使用技巧,助你写出结构清晰、高复用性的Java代码。
4
Java JSON 序列化库详解:Jackson、Gson、Fastjson
Java 本文详细介绍 Java 生态中三种最流行的 JSON 处理库:Jackson、Gson 和 Fastjson。内容将涵盖它们的基本用法、高级特性、性能对比、优缺点分析以及最终的选型建议。目标读者是需要为项目选择 JSON 库或希望深入了解这些库区别的 Java 开发者。
5
2026年SEO优化终极指南:从算法原理到排名飙升的实操策略
网站优化 想知道如何优化网站 SEO 吗?本篇 2026 年最新 SEO 全面指南,将为你详细解析关键词研究,内容优化,外链策略与技术 SEO,让你的网站轻松登上首页!
随机文章 随机推荐
Profile Image of the Author
枫诀宝贝
以代码为任,解剖数字混沌。
站点统计
文章
17
分类
12
标签
63
总字数
33,399
运行时长
0
最后活动
0 天前

目录