一、一维数组介绍
什么是数组?
数组指的是一种容器,可以用来存储同种数据类型的多个值
总结:数组容器在存储数据的时候需要结合数据类型考虑。
例如:int类型的数组容器(boolean byte short double)
建议:容器的类型,和存槠的数据类型保持一致
二、数组元素
1.数组元素访问
数组元素访问:
* 格式:数组名 [ 索引 ]; //arr [8]
* 索引:索引是数组容器中空间的编号,编号从0幵始,逐个+1增长
注意:当访问了数组中不存在的索引,就会引发索引越界异常
2.数组元素修改
数组元素修改:
* 格式:数组名 [ 索引 ]=修改元素; // arr [0]=5
3.数组元素遍历
数组遍历:
*格式:数组名.length //获取元素个数,元素长度
*范例:arr.length //arr.length-1是索引长度
注意:
**1、遍历指的是取出数据的过程,不要局限的理解为, 遍历就是打印!**
2、i:索引
3、arr[i] :元素
三、数组定义格式
数组定义格式:
* 格式1:数组类型 [] 数组名
* 范例: int[] array
* 格式2: 数据类型 数组名 []
* 范例: int array []
扩展:打印数组名会出现一个地址值,该值的含义有如下
打印数组名各值的意思:
[I@10f87f48 : 数组的内存地址
@: 分隔符
[: 当前内存空间是一个数组类型
I: 当前空间中存储的数据是int类型
10f87f48 : 十六进制地址值
如果是打印字符数组的话,不会看到地址值,而是具体的内容
原因:println()源码中会自动对字符数组进行遍历操作
四、数组静态初始化
1. 数组静态初始化含义
静态初始化含义:
指定元素,长度自动分配
2. 数组静态初始化格式
静态初始化格式:
*格式1:数据类型[] 数组名 = new 数据类型[] {元素1,元素2,..};
*范例: int [] arr=new int[] {11,22,33}; //[]这里的里面不能加数字
*格式2:数据类型[] 数组名 = {元素1,元素2...}; //推荐使用
*范例: int [] arr={11,22,33};
注意:
double [] arr={12,20,5.2};
//这样子是可以的,单个整数或者带小数也一样可以
五、数组动态初始化
1. 数组动态初始化含义
动态初始化含义:
初始化时只指定数组长度,由系统为数组分配初始值
2. 数组动态初始化格式
动态初始化格式:
* 格式: 数据类型 [] 数组名 =new 数据类型[数组长度];
* 范例:int [] arr=new int [3]; //【3】其实就是数组的元素个数
注意:
1.允许数组间进行赋值,赋值的是自己所记录的地址值
2.当两个数组通过地址指向同一块内存空间的时候,只要有一个对空间的数据发生了修改,那么另外一个去查找的时候,找到的就是改变之后的那份数据
3. 数组动态初始化的默认值
**例子:**
六、数组动态和静态初始化两种对比
1.静态初始化
静态初始化:手动"指定数组元素",系统会根据元素个数,计算出数组的长度
使用场景:需求中已经明确了要操作的具体数据,直接静态初始化即可
例:将一班的学生的成绩存入数组中:11 , 22,33
int [] arr={11,22,33};
1.动态初始化
动态初始化:手动"指定数组长度",由系统给出默认初始化值
使用场景:只明确元素个数,不明确具体数值,推荐使用动态初始化
例:使用数组容器来存储键盘录入的5个整数
int [] arr=new int[5];
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[3]=4;
arr[4]=5;
七、空指针异常
空指针异常:当引用数据类型变量被赋值为null之后,地址的指向被切断,还继续访问堆内存数据,就会引发空指针异常
如: int[] arr1 = null;
System.out.println(arr1[0]);
八、数组索引越界异常
当访问到了不存在的索引时,就会出现索引越界异常
九、数组内存图
1.数组内存分配
方法区:
1.类的字节码文件加载时进入方法区
2.jvm自动调用main方法(方法),进入栈内存执行
//是jvm调用方法,不是栈调用的
栈内存: 方法运行进入的内存
堆内存:new出来的内容都会进入堆内存,开辟空间,产生地址值
2.两个数组指向相同内存的图
总结
以上就是今天要讲的内容,本文介绍了一维数组的使用,以及相关的访问遍历,还有内存图相关的介绍。
作者:KJ.JK
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习