JAVA 第四天 数组

今日内容
数组的概念和数组变量的定义
数组的初始化及使用
数组的内存图
数组的练习
数组的常见问题

1.1 容器的概念
一个变量中只能存储一个数据,新的数据进来,老的数据将被替换,如果需要存储多个数据,需要使用容器(大的容器)

容器概念
容器:是将多个数据存储到一起,每个数据称为该容器的元素。
生活中的容器:水杯,衣柜,鞋柜, 教室

数组:
1.概念: java中的数组就是一个容器,可以存储多个数据,但是多个数据的类型必须保持一致
2.特点:
(1)可以存储多个数据
(2)多个数据的类型必须保持一致
(3)数组的长度一旦确定,将永远不可以发生改变
1.2 数组变量的定义
数组变量的概念:

1.数组变量定义格式一: 推荐使用
数据类型[] 数组名称;

2.数组变量定义格式二: 不推荐使用的
数据类型 数组名称[];

3.练习:
(1)定义一个存储int类型数组的变量arrayA
(2)定义一个存储double类型数组的变量arrayB
(3)定义一个存储char类型数组的变量arrayC
4.关于 int[] arrayA的理解:
(1)这里只是定义一个可以存储一个int数组容器的变量,但是没有向该变量中存储数组容器
(2)相当于教室的门牌号,但是该门牌号并没有对应的教室
在这里插入图片描述
在这里插入图片描述

1.3 数组的第一种初始化方式

数组的第一种初始化方式(动态初始化: 指定数组长度)
1.格式:
数据类型[] 数组名称 = new 数据类型[长度];
2.格式解释:
(1)左侧数据类型: 表示该数组容器中可以存储什么类型的数据
(2)左侧[]: 代表数组的意思
(3)数组名称: 就是一个标识符,方便使用数组
(4)=: 表示赋值的意思,把=号右侧的数组容器在内存中的地址值,赋值给=号左侧的数组变量
(5)new: JVM在内部创建数组的过程
(6)右侧数据类型: 和左侧保持一致
(7)长度: 规定了数组容器中可以存储多少个数据
1.4 数组的第二种初始化方式
数组的第二种初始化方式(标准格式静态初始化: 指定元素)
1.格式:
数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,…,元素n};

2.注意:
(1)右侧{}中的数组元素之间使用逗号(,)隔开,最后一个元素后面没有逗号
(2)右侧[]中不能写长度,只要写就报错,JVM会根据{}中元素的个数推导数组的长度
1.5 数组的第三种初始化方式
数组的第三种初始化方式(简化格式静态初始化: 指定元素)
1.格式:
数据类型[] 数组名称 = {元素1,元素2,…,元素n};

2.注意:
(1)右侧{}中的数组元素之间使用逗号(,)隔开,最后一个元素后面没有逗号
(2)不能写长度,只要写就报错,JVM会根据{}中元素的个数推导数组的长度
(3)虽然没有写new,但是底层仍然有new的过程,完成数组的创建
(4)动态初始化和标准格式的静态初始化数组,可以分成两步完成
(5)简化格式静态初始化,只能一步完成,不可以分成两步(java中的用法规定)
在这里插入图片描述
1.6 数组的使用
数组的使用:
1.数组名称: 代表数组在内存空间中的地址值,是一个十六进制的int数字
2.索引编号:
(1)数组中的每个数据,称为数组元素
(2)数组为其内部的每个元素进行编号,专业术语叫做索引(角标),从0开始到数组长度减1
(3)索引编号必须是一个>=0的int数据
3.数组元素的访问:
数组名称[索引编号];
array[0]: 代表数组array中索引编号为0的元素
array[2]: 代表数组array中索引编号为2的元素
4.获取数组长度(数组中可以存储元素的个数)
每个数组内部都有一个length属性,其实就是一个int变量,记录了该数组中可以存储的元素的数量
使用格式:
数组名称.length: 获取数组长度,其实一个int数字
注意:
length后面没有(),添加()是错误的
2.1 java中的内存分配
1.方法区: 存储可以运行的class文件。
2.方法栈: 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。
3.堆内存 存储对象或者数组,new来创建的,都存储在堆内存。
4.寄存器 给CPU使用,和我们开发无关
5.本地方法栈 JVM在使用操作系统功能的时候使用,和我们开发无关。
栈内存: 运行方法的,存储方法中定义的变量的
堆内存: 存储的是所有new出来的内容
在这里插入图片描述
3.1 数组遍历
数组遍历:
就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。
注意for循环的结束条件的两种写法:
<=array.length - 1
<array.length
在这里插入图片描述
4.1 数组越界异常
数组操作的常见问题一:
数组索引越界(超出了范围)异常
1.问题描述:
java中使用java.lang.ArrayIndexOutOfBoundsException类用来描述索引越界问题的
2.产生原因:
当使用int数字作为索引获取数组元素时,索引值已经超出了数组的索引范围,
无法获取该索引对应的元素
(1)打印异常信息
(2)停止程序的执行
3.解决方案:
(1)不使用超出索引范围的int数字来获取数组元素
(2)修改索引越界的数字,让它在数组索引范围内
在这里插入图片描述

4.2 数组空指针异常
数组操作的常见问题二:
空指针异常
1.问题描述:
java中使用java.lang.NullPointerException类,来描述空指针异常
2.产生原因:
null是引用类型的空常量,可以给任意引用类型的变量赋值,但是一旦引用变量的值是null时,
说明该引用变量已经不再执行堆内存的任何空间,也就不能范围堆内存空间中的元素了
数组变量的值是null时,说明该数组变量已经不再执行堆内存空间的任何数组了,
所以就无法通过索引的方式访问数组元素了,只要访问,就会报出空指针异常
(1)打印异常信息
(2)停止程序的执行
3.解决方案:
(1)不使用值是null的数组变量来获取数组元素
(2)找到数组变量值是null的地方,给数组变量重新赋值,让改数组变量重新指向一个新的数组空间
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值