java的数组
2026/4/21 13:28:10 网站建设 项目流程

本节目标

1.数组的基本概念

1.1为什么要使用数组

假设现在要存5个学生的javaSE考试成绩,并对其进行输出,按照之前掌握的知识点,那么我会写出以下代码:

上述代码没有任何问题,但不好的是:如果有20名同学的成绩呢,需要创建20个变量吗?仔细观察这些学生的成绩发现:所有成绩的类型都是相同的,那java中存在可以储存相同变量多个数据的类型吗?这就是本节的数组。

1.2什么是数组

总结:

1.3数组的创建及初始化

1.3.1数组的创建

演示:

补充:(1)array叫做引用变量,简称引用(因为array存储的是数组第一个元素的地址);(2)数组的具象表现如下图所示:

(3)数组有两种语法形式

1.3.2数组的初始化

数组的初始化主要分为动态初始化以及静态初始化

1.动态初始化:在创建数组时,直接指定数组中元素的个数

语法形式:

注意:

2.静态初始化:在创建数组时不直接指点数据元素个数,而直接将具体的数据内容进行指定

语法形式:

提醒:

注意:(1)不建议使用c++中的数组形式(int array[]),因为int[]是类型,array是变量,java的形式会更加清晰不会搞混;

(2) 数组初始化的错误示范

原因:[]和{}两个括号中不能同时有元素在

解析:动态和静态初始化可以分为两步,但是省略式不可以分布

(3)如果没有对数组进行初始化,数组中元素有默认值

1.4数组的使用

1.4.1数组中元素访问

数组在内存中是一段连续的空间,空间编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过下标访问其任意位置的元素。

演示:

注意:

演示异常:

这个报错是数组越界异常,双引号后面的Index 15 out of bounds for length 6 是告诉你错误的原因

1.4.2遍历数组

所谓“遍历”是指将数组中的所有元素都访问一遍,访问是指对数组中的元素进行某种操作,比如:打印

演示遍历数组的打印:

法一:for循环

注意:在数组中可以通过数组对象.length来获取数组的长度

法二:for each循环

演示:

语法形式:冒号左边是数据类型,右边是数组名称

辨析:fori循环和foreach循环的区别——foreach循环无法获取到对应的下标

法三:用工具遍历数组

用操作数组类的工具Arrays中的toString方法

演示:

详细过程:

tips:如果只是单独想查看数组里的元素用Arrays的方法会比较便捷!

2.数组是引用类型

2.1初始JVM的内存分布

内存是一段连续的存储空间,主要用来存储程序运行时数据的。

问题:

1.为什么要划分内存

如上图所示,为了使其更加的规则有序所以我们给内存划分了不同的区域

2.划分成了哪些内存

各部分的详细内容:

补充:为什么会有两个栈,它们之间有什么区别?

2.2基本类型变量于引用类型变量的区别

举例:

如上图所示:

为了更加清楚的了解栈和堆之间的关系,我们接下来用图来理解

补充:局部变量都会在栈上开辟内存,而对象会在堆里开辟内存

从上图可以看到,引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。通过该地址,引用变量便可以去操作对象。有点类似c语言中的指针,但是java中的引用要比指针的操作更简单

2.3再谈引用变量

演示代码:

画图分析:

接下来我们将会对每一行代码逐句解读

第一行代码执行后(因为只是对数组进行定义,里面的值都是默认值)

之后的二到四行代码执行后:

第五行代码:

之后的第六行代码:

第七行代码(重点):

此时我们会说array1这个引用指向了array2这个引用所指的对象,但我们发现一个问题,之前array1指向的对象去哪里了?

结果————如果这个对象一直没有人引用他,此时就会被JVM自动回收

第七到九行代码:

如果两个引用同时指向一个对象的时候,操作任意一个引用都可以修改这个对象的值

2.4认识null

演示:

此时我们不会说是array2执行null,而是会说array2这个引用不指向任何对象

常见案例:

空指针异常

结果:

原因:我们使用了null.xxx,例如在本示例中的array2就是等于null的,所以array2.length就是null.xxx的形式

总结解决办法:如果将来代码报错空指针异常,那么我们要做的是找到这行代码中的引用,判断这个引用为什么是空的!

演示:

同理可得这种情况也会有空指针异常

总结:

3.数组的应用场景

3.1保存数据

演示:

3.2作为函数的参数

3.2.1参数传基本数据类型

发现在func方法中修改x的值,不影响实参的num值

2.参数传数组类型(引用数据类型)

需求:把数组当中的每个数据扩大两倍

参考:

接下来用画图来理解代码:

传参前:

传参后:

当返回ret的时候:

注意:当函数结束的时候,局部变量的值会被回收

所以综上所述演示的是引用的赋值(数组)

变式:在原来数组上扩大两倍

用画图理解:

进入函数前:

进入函数后:

函数结束后:

通过上面两个代码我们可以发现,传引用可以改变实参的值,也可以不改变形参的值

为了方便理解传引用,我们再举两个简单一些的例子:

演示:

类型一:

类型二:

画图理解:

传参前:

传参后:

总结:一个引用不可能同时指向多个对象

3.3作为函数返回值

参考:

小结:

1.int[] array = null ;代表这个引用不指向任何对象

2.array 1 = array 2 ;代表array1这个引用指向来了array2这个引用所指向的对象

3.一个引用不可能同时指向2个对象

4.数组练习

4.1数组转换字符串

尝试写一个自己的方法

参考:

在java中提供了java.util.Arrays包,其中包含了一些数组常用方法,这样我们可以直接使用转换的方法,而不用每次都自己书写

演示:

4.2数组拷贝

4.3求数组中元素的平均值

要求:给定一个整型数组,求平均值

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询