数组是大多数编程语言都提供的一种复合结构,如果程序需要多个类型相同的变量时,就可以来考虑定义一个数组。
数组初始化
Java数组的静态特性
Java是典型的静态语言,Java数组也是静态的,当数组被初始化后,该数组的长度是永远不变的。
数组的初始化方式
静态初始化:直接指定数组中各元素的值,由系统确定其长度
动态初始化:指定数组长度,由系统为其分配初始值
--------------->1)若为整数类型(byte、short、int、long),初始化值为0;
--------------->2)若为字符类型(char),初始化值为’\u0000’(空格);
--------------->3)若为布尔类型(boolean),初始化值为false;
--------------->4)若为引用类型(普通Java类、接口、数组),初始化值为null;
上例子!!!
下面来分析该程序在内存中的情况
Java语言的数组变量是引用类型的变量,会存储在各自的方法栈区,而引用类型所引用的对象(数组、普通Java对象)会存储在堆内存中,在Java中,堆内存中的对象不能直接被访问,而是要通过引用变量,也就是说堆内存中存储的一个个值不能被直接拿来用,而是要通过变量引用它也就是赋值给变量才能使用。
有些新手会感觉这样很麻烦,其实不是那样,正是因为这一个个的限制约束极大地保证了Java程序的健壮性、数据完整性!
需要注意的是,Java数组一旦初始化完成,数组元素的内存空间分配就会结束,程序中只能改变数组元素的值,不能改变数组的长度!
那如果是这样呢
看了它的内部存储你就明白了
其实在执行—>language=str1;<—这个程序时,它就把language的指针指向了str1所引用的值上,其本质上引用的对象值还是没有发生改变,稍后废弃在堆内存中的无用的值会被Java的垃圾回收机制给处理掉。懂了吗,懂就点个赞哦哈哈
基本数据类型的初始化
对于基本数据类型而言,数组元素的值直接存储在相应的数组元素中。程序先为数组分配内存空间,再将数组元素的值存入对应内存中。
例子例子我要例子!!!
当执行—>int[] array=null;<—时,会在main方法栈区里定义一个array的变量,它是一个引用类型的变量,并未指向任何有效的内存,没有真正指向实际的数组对象,此时不能访问array的属性和方法(没有指向实际对象而去访问会报空指针异常,即java.lang.NullPointerException),但程序可以使用此变量不会报错 。
综上,我们定义一个数组变量后,一定要为其指向一个实际对象,也就是我们通常所说的“Java数组使用之前必须先初始化数组”!
像上文我们使用–>language=str1;<—也是可以的,因为str1初始化了,我将这种方式称之为**“数组代理初始化”**。
引用类型的初始化
当程序中需要多个简单的(像基本数据类型)相同的变量时,我们可以使用基本数据类型的数组;
如果我们需要更加复杂点的(像普通的Java类)多个变量时呢,我们就可以使用引用类型的数组。
引用类型数组的数组元素依然是引用类型的,因此数组元素里存储的还是引用,它指向另一块内存,这块内存里存储了该引用变量所引用的对象(包括数组和Java对象)。
上例子!!!
students是引用类型的数组,so->students[0]和students[1]两个数组元素相当于两个引用类型的变量,接着定义了两个Student类的实例化对象xiaoMing和xiaoHong,数组指针指向这两个对象,也就是赋值操作。对于Student[]类型的数组而言,它的每一个数组元素都相当于一个Student类型的变量,因此它的数组元素只能指向Student类对象。
内存图如下:
多维数组的使用
我们通常使用的都是普通的简单的数组,即一个数组元素只存储一个元素,如果一个数组元素里可以再存储一个数组的话,就形成了多维数组。就是数组里还有数组,一个数组元素里若有一个数组的话就组成了2维数组,有两个数组就组成了3维数组…以此类推。
我们就以2维数组来进行分析,相同的思路就可以推出多维数组的使用了哈。
int[]:一维数组
int[][]:二维数组
…
以此类推
来个更直观点的图!!!(纯手绘,没得毛病)
Java允许将多维数组当成一维数组处理。初始化多维数组时可以只先初始化最左边的维数。
上例子!!!
完结撒花
结束啦,复习一下,本次学习呢,首先搞明白了什么是数组,数组的静态特性,即数组长度一经初始化不能改变,两种初始化数组的方法:静态初始化和动态初始化,还有其分配内存的小小细节啦,看我画的图,清晰得不得了!又举了两种不同类型数组的例子,一个是基本类型的数组,另一个是引用类型的数组。在引用类型里介绍了数组变量和实际变量的不同及其关系,数组变量指针指向实际变量,一定要清楚哈,不清楚的话再去看一遍喽,最后呢,说了多维数组的骚操作——数组嵌套数组,还有一张非常清楚的多维数组直观图,一定要好好研究下哈,把握好一维数组与多维数组的关系,就到这里啦,放假了哈哈,终于有时间来更新我的博客啦,学会了就给UP主点个关注吧哈哈,那就下次见喽!!!