数组相关知识

数组的介绍:

数组指的是一种容器,他可以用来存储同种数组的多个值

数组静态初始化

在内存中为数组容器开辟空间,并存储到容器的过程

格式一: 数据类型[] 数组名
        int[] array
格式二: 数据类型  数组名[]
        int array[]
        int[] array1; // 这是数组类型的变量,没开辟容器
完整格式: 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...} //数值内容数据类型必须完全一致
简化格式: 数据类型[] 数组名 = {11,12,33}
System.out.println(arr1)//[d@776ec8df  数组的内存地址--16进制  
                      [--->当前空间是一个数组类型
                        d --->空间存储的数据类型
                        @:分隔符
                        776ec8df---->十六进制的

数组的元素访问

访问格式:
    数组名[索引]
索引(角标,下标):索引是数组容器中空间的编号,编号从0开始,逐个+1增长
数组每一个值都称为元素(存在隐式转换)
double[]dArr = {11,22.2,33.3,44.4,55.5}
//将33.3取出
System.out.println(dArr[2])
//修改55.5改成66.6
dArr[4]=66.6;

遍历数组操作

数组的通用遍历方式 for(int i = 0 ; i < 5 ; i++){ //i:代表索引 System.out.println(arr[i]); }
数组的遍历:快捷键 arr.fori
什么时候对数组进行遍历操作??
-如果要实现的需求,是对数组的[每一个]元素进行操作,就需要对数组进行遍历

 

数组动态初始化

初始化时,至指定数组的长度,由系统为数组分配初初始值
格式: 数据类型[] 数组名 = new 数据类型[长度]
默认初始化值:
小数类型:0.0  
布尔类型:false  
字符类型:'\u0000' ---->空白字符  ----> Unicode字符 ASCII码表  

引用数据类型:null(空)  

引用数据类型:类,接口,数组。 

 引用了(记录了)一份地址的变量,该变量所对应的数据类型就是引用数据类型。  

iArr = [d@776ec8df  ​ ​
整数类型:
0

 

 

数组初始化区别

  • 动态手动指定数组长度,由系统

    • 只明确要存储的元素是个数,但不明确具体数值

  • 静态

    • 如果要 操作的数据,在需求中已经明确给出了

数组内存图

    • 方法运行是进入的内存

    • new出来的东西都会在堆内存开辟空间

  • 方法区

    • 字节码文件(.class)加载时所进入的内存

两个数组指向相同的内存图

 ① .class 和main方法进入方法区

② main方法进入栈内存,开辟新空间,首先会按顺序执行,执行int[ ] array1 = {11,22,33};这里其实是数组的简写,在执行的时候,数组简写也会按照完整版 int[] array1 = new int [ ] {11,22,33};执行, 看到new,说明要进入堆内存开辟空间

③ 进入堆内存后,首先会在堆内存中开辟一个数组的空间,将array1数组的元素存储到这个空间中,存储好了之后,他会形成一个这个空间的地址,方便查询

④然后这个地址会赋值给array1这个数组,如果我们打印该数组的话,他会打印一次地址值

⑤执行完array1之后,顺序执行int { } array2 = array1; 因为array1存放的是地址值,array1直接赋值的话会传给array2地址值,这样array2这个数组他的地址值和array1的地址值相同,这样他们在堆内存的空间也是同一个。

⑥这样他们打印0号索引位置的元素,都会是100

 

数组常见的问题

ArrayIndexOutOfBoundsException 当访问量数组中不存在的索引,会引发索引越界异常

当引用数组类型变量被赋值为  null 之后,地址的指向被切断,还继续访问堆内存数据,就会引发空指针异常

 

二维数组

二维数组也是一种容器,而他存储的是一堆数组(属于数组的嵌套)

 

二维数组的静态初始化

数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2},{元素3,元素4}};

数据类型[][] 数组名 = {{元素1,元素2},{元素3,元素4}};

//元素访问
system.out.println(arr[][]);

二维数组的元素访问

system.out.println(arr);//看到二维数值的地址值
system.out.println(arr[0]);//看到一维数值的地址值

二维数组的遍历操作

int[][] arr = {

{11,22,33},

{21,33,45}

};

for(int i = 0 ; i <arr.length; i++){

    for(int j = 0; j <arr[i].length; j++){

        system.out.println(arr[i][j]);

}

}


二维数组的动态初始化


格式:
数据类型[][] 数组名 = new 数据类型[m][n]
m:可以存储多个一维数组
n:每一个一维数组可以存储多少个元素
int[][] arr = new int[2][3]
这个二维数组可以存储两个一维数组,每个一维数组三个元素

 
posted @ 2021-09-23 09:54  TTTTTTTAO  阅读(38)  评论(0编辑  收藏  举报