- 数组介绍
1、数组(array)是一种容器,用来存储(同种数据类型)的多个值;
2、应用场景:要操作的数据,是同一组数据,可以使用数组容器进行存储;
3、总结:数组容器在存储数据的时候,需要结合数据类型考虑。容器的类型和存储的数据类型保持一致。
例如:int类型的数组容器(boolean,byte,short,double)
- 数组的定义格式
数组的定义格式
格式一:数据类型[ ] 变量名
例如:int[ ] array
格式二:数据类型 变量名[ ]
例如:int array[ ]
- 数组初始化之动态初始化
Java中的数组必须先初始化,然后才能使用;
1、初始化:在内存中,为数组容器开辟空间,并将数据存入容器中的过程;
2、动态初始化:初始化时只指定数组长度,由系统为数组分配初始值;
3、格式:数据类型[ ] 变量名 = new 数据类型[数组的长度];
4、运行下面代码,显示出的是内存地址;
5、注意:打印数组变量名,出现的是数组在内存中的地址值;
例如:[I@776ec8df
@:表示分隔符;
[:表示当前的空间是一个数组类型;
I:表示当前数组容器中所存储的数据类型;
776ec8df:表示十六进制内存地址;
- 数组元素访问
1、数组内存地址的访问方式:格式:数组名
2、数组内存保存的数据的访问方式:格式:数组名[索引]
3、索引:是数组容器中空间的编号;
特征1:索引从0开始;是连续的,逐一增加,每次加1;
作用:访问数组容器中的空间位置;
例如:
运行结果:
- 内存分配
Java程序在运行的时候,需要在内存中分配空间,为了提高运算效率,对空间进行不同区域的划分,每片区域都有特定的处理数据方式和内存管理方式。
1、Java内存
栈内存:方法运行时,进入的内存,局部变量都存放于这块内存当中;
堆内存;new出来的内容都会进入堆内存,并且会存在地址值;
方法区:字节码文件(.class文件)加载时进入的内存;
本地方法栈:调用操作系统相关资源;
寄存器:交给CPU去使用;
2、Java中内存分配
数据类型 | 默认值 |
整数 | 0 |
浮点数 | 0.0 |
布尔 | false |
字符 | 空字符 |
引用数据类型 | null |
引用数据类型:引用、记录了地址值的变量,所对应的数据类型,就是引用数据类型。例如:int [ ] arr =new int[3];
- 数组内存图
每new一次(即每创建出一个新的数组),在堆内存中,都是一块新的空间,堆内存中的空间地址不会出现重复现象。
多个数组指向一个内存图
- 数组初始化之静态初始化
1、静态初始化:初始化时,可以指定数组要存储的元素,系统还会自动计算出该数组的长度;
2、格式:数据类型 [ ] 变量名=new 数据类型[ ]{数据1,数据2,…};
例如:int [ ] arr=new int[ ]{1,2,3};
简化格式:数据类型[ ] 变量名={数据1,数据2,…};
例如:int [ ] arr={1,2,3};
3、动态初始化和静态初始化区别:
静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组长度;适用于:需求中已经明确要操作的具体数据。
动态初始化:手动指定数组长度;系统给出默认初始化值;适用于:只明确元素个数,不明确具体数值。
- 数组操作的两个常见问题
索引越界:访问了数组中不存在的索引,造成索引越界问题;
空指针异常;访问的数组已经不再指向堆内存的数据,造成空指针异常;
null:空值,引用数据类型的默认值,表示不指向任何有效对象;
- 数组遍历
1、定义:把数组中所有的数据都取出来;
2、数组遍历:通过循环获取数组中的所有元素(数据)
- 获取最值
数组中最大或最小值;
获取最大值:
十一、数组元素求和
1、键盘输入4个数,存储到数组中,并对数组求和;
十二、数组基本查找
已知一个数组arr={11,34,45,56,67};键盘录入一个数据,查找该数据在数组中的索引,并在控制台输出找到的索引值;