一、概述
数组:就是用于存储【相同数据类型】的数据的【容器】。
为什么要使用数组:没有数组,存在多个变量,需要声明多个变量的名称,这些名称之间没有什么关联,想访问所有的变量,比较困难。有了数组,只需要有一个数组容器的名称,容器里面有通过数字表示位置。同时这些数字位置有规律,结合数组名称非常容易的去访问所有的变量。数字位置可以称为索引,数组在内存中开辟了一块连续的内存空间。
二、定义和初始化
1.数组的定义格式
格式1:数据类型[] 数组名;(推荐使用) 如: int[] nums ;
格式2:数据类型 数组名[]; (兼容c语言的格式) 如 int nums[]
2.数组初始化
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
注意:Java中的数组必须先初始化,然后才能使用。
(1)动态初始化
格式:数据类型[] 数组名 = new 数据类型[数组长度];
举例:int[] arr = new int[3]; //解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值。
详细解释
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr);//[I@5f150435
}
以上方法执行,输出的结果是[I@5f150435,这个是什么呢?是数组在堆内存中的地址。
[:表示一个一维数组。(如果是[[,表示二维数组)
I:表示数组中存放的是int类型的数组
@:连接符,没有实际意义
5f150435:表示数组中的起始的内存地址值。数组名称 arr 可以存数组的地址。
注意:new出来的内容,都是在堆内存中存储的,而方法中的变量arr保存的是数组的地址。
(2)静态初始化
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例:int[] arr = new int[]{1,2,3}; //解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值,并且值分别是1,2,3。
简化格式:数据类型[] 数组名 = {元素1,元素2,...};
举例:int[] arr = {1,2,3};
3.访问数组元素
索引:每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index)(下标),可以通过数组的索引访问到数组中的元素。
格式:数组名[索引]
数组的长度属性
每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的长度。
语句为: 数组名.length ,属性length的执行结果是数组的长度,int类型结果。
由此可以推断出,数组的最大索引值为数组名.length-1 。
class Test {
public static void main(String[] args){
int[] arr = {1,2,3,4,5};
System.out.println(arr.length);//5
}
索引访问数组中的元素
数组名[索引]=数值,为数组中的元素赋值。
变量=数组名[索引],获取出数组中的元素。
三、数组内存图
1.概念
内存是计算机中的重要元件,可以用来给程序临时存储数据。我们编写的程序,必须放进内存中才能运行,运行完毕后会清空内存。Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
2.JVM内存划分
JVM是执行java程序的容器,空间很大,需要划分不同的空间,不同的功能,需