第三章 Java基本语法 数组的描述:一维数组和二维数组的解析
一,数组的概述
1,数组的理解
数组(Array),是多个相同类型数据一定顺序排列的集合
并通过编号的方式对这些数据进行统一管理
2,数组的相关的概念:
>数组名
>元素
>角标,下标,索引
>数组的长度,元素的个数
3,数组的特点
1数组是照一定的顺序排序的
2数组属于引用数据类型的,String就是引用数据类型的,
所以数组的元素既可以是基本数据类型,也可以是引用数据类型
3数组是连续空间的结构,而链表是不规则空间的结构
4数组的长度一旦确定,就不能修改
4,数组的分类:
1照维数,分为一维数组,二维数组·····
2照数组元素的类型,基本数据类型元素的数组,引用数据类型元素的数组
5,一维数组的使用
1一维数组的声明和初始化
2如果调用数组的指定位置的元素
3如何获取数组的长度
4如何遍历数组
5数组元素的默认初始化值
6数组的内存解析
* 6,数组的内存解析
* 内存的结构跟JVM的规范关,不同版本的JVM,JDK的结构也所区别
变量声明了之后就放在了栈空间,然后由于new了一个结构,他在堆里面
而且长度是三,连续存储,而连续的这三个空间,他会有一个首地址值,第一个元素的地址值
而且首地址值通常是由十六进制来表示的,然后把首地址值赋给arr
而栈空间的arr,他就可以通过这个首地址值找到堆空间的数组了,然后他就联系起来了
但是此时我们赋值了,堆空间刚开始开辟的时候,先赋值的是0,然后再被替换
接下来下一句是,先在栈空间声明String类型的arr1数组,然后我们new结构,
在堆空间开声明长度是4,堆空间他开辟的连续的空间,他会有首地址值
并赋值为null,然后把首地址值,也就是第一个元素的地址赋给了arr1,
然后arr1就通地址值,就可以指向堆空间的实体结构了
然后通过角标的方式,去调用这个数组中的指定元素,arr1,然后指向地址,然后找到第二个元素
然后把值赋给第二个位置,第三个位置
之后的 arr1 又重新造了一个new的结构,然后把新的结构的首地址值给了arr1
然后把之前的替换的地址替换了,而之前的就没有哪个指针了
现在就是新的地址,而垃圾回收器,其中一种引用数据算符他就会判断,
这个堆空间的无用的空间,是否还有栈空间的引用指过来,刚才有指针有指向无用的空间他不会清除
但是此时没有栈空间的指针指向这个无用的空间了,就是栈空间中没有人再去调用他了
那他就是一个垃圾,他就会在一个不确定时间,在空闲的时间,把他给回收掉了
而我们的main方法,变量都是有作用域的,如果这个main方法执行完了,他的变量就没用了
所以此时他的栈空间的变量就会出栈,而出栈了之后,指针就会没有了,
堆空间就会被检测到无用的空间,那些没有被指针指向的空间,然后接着把他们回收掉
单行注释
选中
ctrl+/
取消
ctrl+/
多行注释
ctrl + shift + /
取消
ctrl + shift + \
要删,必须是在同一行上,也就是赋值和声明一起,因为他会类型判断,分行,就无法判断了
特殊情况,我们还是按我们的标准的写法标
一维数组,一层for循环,二维数组,两层for循环,三维数组,三层for循环
外层的地址值,
引用数据类型的都是null,空指针异常
因为[4][]这4个每一个都是一维数组引用数据类型,而且没有赋值过,就自然是null
首先我们声明变量 arr1数组在栈空间,new一个新的二维数组结构在堆空间里
二新的二维数组的首地址值也会赋给arr1,而此时外层的每一个元素都是int[]数组
而这个数组是引用数据类型的,所以他的初始化值为null
之后给arr1数组的第二个元素进行了初始化,new的然后在堆空间开辟新的数组结构,然后把首地址
赋给了第二个元素,而这个地址里面的每个元素都是int类型的,是0的初始化,每个进行赋值
第三个也是通过new,把自己的首地址文件交给第二个元素的位置
第四个则是,进把这个元素赋值为30