数组
P62讲解数组的概念,程序中的容器:将多个数据存储到一起,每个数据成为该容器的元素。
Java中的容器,数据、集合框架(12章),在内存中对多个数据的存储,不是磁盘上的存储。
数组:是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行同一管理。数据的组合。
数组中的概念:1、数组名2、下标3、元素4、数组的长度。
数组的特点:
数组本身是引用数据类型,数组中的元素可以是任何数据类型包括基本数据类型和引用数据类型
创建数组对象会在内存中开辟一整块连续的空间。占空间的大小,取决于数组的长度和数组中元素的类型。
数组中的元素在内存中是依次紧密排列的,有序的。
数组,一旦初始化完成,其长度就是确定的。数组的长度一旦确定,就不能修改。
可以通过下标的方式调用指定位置的元素。
数组名中引用的是这块连续空间的首地址。
数组的分类,
按照元素类型分类:1、基本数据类型元素的数组:每个元素位置存储基本数据类型的值;2、引用数据型元素的数组:每个元素未知存储对象(本质是存储对象的首地址)
按照维度分:
一维数组:存储一组数据
二维数组:存储多组数据,相当于二维表,一行表示一组数据,这里的二维表每一行长度不要求一样。
一维数组的声明,格式,推荐使用:元素的数据类型[] 一维数组的名称; 不推荐使用:元素的数据类型 一维数组的名称[];
在声明中需要明确:1、数组的维度(一维[],二维[][]);2、数组的元素类型(任意数据类型);3、数组名(和变量的命名方式相同)。
注意:Java语言中声明数组时不能指定其长度(数组中元素的个数)。例如:int a[5];
一维数组的初始化分为静态初始化和动态初始化,数组变量的初始化和数组元素的赋值操作同时进行,称作静态初始化,本质是使用静态数据为数组初始化,数组的长度有静态数据的个数决定。
一维数组声明和静态初始化格式1:
数据类型[] 数组名 = new 数据类型[]{元素1, 元素2 …};
或者 数据类型[] 数组名; 数组名 = new 数据类型[]{元素1, 元素2 …};
一维数组声明和静态初始化格式2:
数据类型[] 数组名 = {元素1, 元素2, 元素3…};
动态初始化,数组变量的初始化和数组元素的赋值操作分开进行,动态初始化中,只确定了数组的长度。动态初始化格式如下:
数组存储元素的数据类型[] 数组名字 = new 数组存储元素的数据类型[长度];
自己总结,为了便于记忆
静态声明和初始化数组
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
动态声明和初始化数组
数据类型[] 数组名 = new 数组类型[数组长度];
一维数组的使用,数组有一个属性length指明它的长度,如arr.length指明数组arr的长度。可以使用索引来表示数组中的元素,如数组名[索引/下标],数组下标的范围是从[0, length-1]。
遍历:将数组中的元素分别获取出来,就是遍历,可以使用for循环进行一维数组的遍历。
当我们使用动态初始化方式创建数组时,元素值是默认值,对于不同的数据类型,默认值不同,具体如下
为了提高运算效率,对空间进行了划分,每一片区域都有特定的处理数据方式和内存管理方式
其中和数组有关的是虚拟机栈和堆,虚拟机栈存放数组变量,堆中存放数组实体。
一个一维数组内存图
public static void main(String[] args){
int[] arr = new int[3];
System.out.println(arr);
}
上述代码的执行流程,首先在虚拟机栈中运行main()方法,然后JVM会根据new方法在堆区开辟一块内存,接着将这块内存的首地址赋值给变量arr,变量arr中存的是数组的首地址,而不是一个具体数值,所以称为引用数据类型。上述流程如下图所示
数组下标从0开始是因为,首地址和第一个元素之间相隔0个单元格。
两个一维数组内存图如下
两个变量指向一个一维数组,内存图如下