Java基础系列--05

系列持续更新,敬请关注!
阅读原文体验更加原文链接
Java基础系列01–Java介绍
Java基础系列02–常量变量
Java基础系列03–数据类型转换,运算符
Java基础系列04–选择语句,循环语句
Java基础系列05–数组
Java基础系列06–方法

数组

之前的文章已经说过定义变量,假如我们要操作某个学生的数学成绩,我们可以定义一个变量等于他的数学成绩,如:float a = 99.5;但如果不是一个学生,是一个班的学生呢?总不能定义几十个变量进行操作吧。所以我们就想能不能把这几十个数据放到一个容器中进行操作呢?这里我们就引入数组(这里先说一维数组)。
数组:指一组相关变量的集合。
特点:1.数组是一个容器,是一个引用数据类型,在堆中。2.一致性:数组中的所有数据被要求数据类型相同。3.不可变性:长度一旦确定就不可改变。4.有序性:根据序号使用(索引/下标)。
定义形式:1.数组存储数据类型[] 数组名(如:int [] arr)。2.数组存储数据类型 数组名[](如:int arr[])。需要说明的是两种定义形式效果是一样的,但是读起来不一样。形式1:定义了一个int型的数组,数组名是arr。形式2:定义了一个int型变量,变量名是arr数组。

数组的初始化格式

格式1(动态初始化):数组存储的数据类型[] 数组名 = new 数组存储的数据类型[长度];
格式2(静态初始化):数组存储的数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3…};
格式3(静态初始化的简化格式):数组存储的数据类型[] 数组名 = {元素1,元素2,元素3…};
动态初始化和静态初始化的区别
动态初始化:初始化时只指定数组长度,由系统为数组赋初始值。
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
这里就格式1详细解读一下初始化各部分的意思
数组存储的数据类型:创建的数组容器可以存储什么数据类型。
[] : 表示数组。
数组名:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。
new:关键字,创建数组使用的关键字。
数组存储的数据类型:创建的数组容器可以存储什么数据类型。
[长度]:数组的长度,表示数组容器中可以存储多少个元素。

数组的访问

我们访问数组中的元素使用的形式为数组名[索引](如:arr[2]即为访问arr数组中第三个元素)。什么是索引?为什么中括号里明明是2,却说访问的是第三个元素?
索引:每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。注意索引是从0开始的,这就是为什么中括号里是2,表示的却是第三个元素。
数组长度:每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的长度,格式为:数组名.length(如:arr.length),其结果为int型,表示数组长度,所以数组最大索引为arr.length-1。

内存分配

大家可以对照下面的图进行理解。int[] arr是定义一个数组,变量名为arr在栈内存中。new int[3]在堆内存中开辟一个空间进行存储数据。所以第一句话int[] arr = new int[3];就是将开辟的空间地址赋给arr。所以arr指向这个空间,才能对这个空间进行操作,arr的值也就为该空间地址值,大家看第一行输出的就是一个地址。arr[0]先找到arr指向的地址,然后找到索引0对应的元素。arr[1]和arr[2]同arr[0]。
在这里插入图片描述

有的同学可能会问,数组明明没有赋值,为什么能输出0呢?因为数组初始化时会为存储空间赋默认值。默认值:整形(0),浮点数(0.0),布尔值(false),字符(空字符),引用数据类型(null)。

数组常见问题

数组常见问题:1. 数组越界异常。2.数组空指针异常。
1.数组越界异常,例如上面创建的数组(int[] arr = new int[3];)上图中只打印了arr[0],arr[1],arr[2]。如果试着输出arr[3]呢?将会抛出 数组越界异常“ArrayIndexOutOfBoundsException”。因为我们说了索引从0开始,最大值是数组长度减1,而3大于索引最大值,是不存在的,所以会出现越界异常。
2.数组空指针异常,上文中提到int[] arr = new int[3];中arr的值是该数组的地址,即arr指向数组的存储空间,所以才能对这个空间进行操作。如果进行赋值arr=null;之后再进行输出arr[0],arr[1]会怎么样呢?答案是会报空指针错误“NullPointerException”。因为对arr赋空值null后,变量arr将不再保存数组的内存地址,也就不允许再操作数组了。这里再复习一下访问数组元素的思路。将new int[3]开辟的数组空间地址赋给数组变量arr(int[] arr)。即数组变量arr的值为数组存储地址。如果要输出arr[0],先通过arr找到数组存储地址,再通过索引找到对应元素。如果arr被赋空值(null),不在指向数组存储空间,连地址都没得了,还上哪找人去,是这个道理。

还有一些数组的应用,我会写在例子里(例子和文章可能有一定的延迟哈,因为例子也需要时间编写,后台回复【示例】获取),建议初学者将例子运行,配合文章和例子里的注释进行理解。之前文章忘了添加留言小程序了,这篇文章加上了,有疑问可写在留言里大家一起解答。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值