Java数组的介绍
1.数组的定义与初始化
数组是储存同一类型多个元素的固定容器,数组拥有下面几种特点:
1.数组里面的元素的数据类型一致的。
2.数组里的元素个数需要有多个(含有一个或零个的元素的数组可以创建但没有意义)。
3.以声明的数组长度是固定的不变的。
数组的定义(声明):
数据类型[] 数据名
数据类型 数据名[]
数据类型;数组的数据类型
[]:定义的是数组
数组名:给数组起的名称
数组的初始化方式:
1.动态初始化(在初始化时,只初始化数组的长度,不具体初始化数组的数据)
int b[]=new int [5];
2.静态初始化:在初始化数据时,不直接初始化数据的长度,初始化数据的具体元素, jvm会通过数组中具体元素个数分配空间
int[] a = {1, 2, 3, 4, 5};
在数组的初始化时Java不允许通过动静结合的方式初始化数组
2.数组元素的访问与修改
以我们上述定义的数组a[]为例子
System.out.println(a);//得到人工模拟的内存地址
System.out.println(a[0]);//访问数组的元素
a[1]=5;//修改a[1]中的元素
System.out.println(a[1]);
System.out.println(a.length);//动态获取数组的长度 数组名.length (会返回一个length值)
3.数组的空间分配
在数组的初始化时,JVM会在系统的栈存储空间中分配空间给初始化的数组,分配空间 的大小与初始化时定义的数组长度有关。在一开始初始化空间时,无论时静态初始化还是动态初始化,其分配栈空间的默认值都是相同的,int类型是0,String类型是null等。但静态初始化在之后会自动将栈空间的值进行改变。
以为数组指向的是栈空间,说一会出现如下一种情况:
int [] c;
c=a;
for(int i=0;i<c.length;i++){
System.out.println(c[i]);
}
我们会发现输出出来的元素值与数组a[]的元素值一摸一样,这是应为我们让数组c[]的栈空间指向与a一样,我们测试如下代码会发现,c[]与a[]的内存地址是相同的,这也证明了此 时他们指向相同的栈空间。
System.out.println(c);
System.out.println(a);
以为数组的空间是被分配好的栈空间,所以我们在使用数组时会出现 数组索引越界异常的的操作。其原理时我们访问的索引超出了分配的空间。以上述的数组a[]为例,数组a的 长度为5,但我们却想去访问a[5](数组空间索引从0算起),这就会导致程序运行错误。