数组是一种常见的数据类型,它就像一个容器,里面可以存储多个数据,同时其中的每一个数据叫做这个数组的元素。这个容器最大的一个特性就是里面的数据类型只能是同一种。接下来我们可以了解到数组的定义及使用。
1.数组的定义:
语法格式 type[] arrayName;
type arrayName[];
这两种格式都是Java所支持的,推荐使用第一种可读性较强的格式。在java中数组也是一个类,我们知道类的定义格式为 “类名 变量名”,由此可知数组的语法格式,其中type[]是一种引用类型,arrayName是变量名(数组名)。
2.数组的初始化:
java中数组必须初始化以后才可以使用,所谓初始化就是给数组分配内存空间,并为每个元素赋初值。
两种方式:
3.数组的使用:
对于数组的使用通常就是访问数组,其中包括对数组的赋值和访问具体的数组元素。java给了数组中的每个元素一个下标作为索引,这个下标从0开始。比如要访问数组中第一个元素时,只需在数组的方括号中写入第一个元素的下标即可, System.out.println(arrayName[0]);
在数组中只有唯一的一个属性,length,我们可以通过这个长度属性可以遍历到整个数组的元素,
for(int i=0;i<arrayName.length;i++){
System.out.println(arrayName[i]);
}
4.数组在内存中的存储:
首先我们要知道内存大致可以分为两块:堆和栈。
(1)在定义数组时,即执行 type[] arrayName,这时在内存中的栈里面开辟了一个空间存储了这个数组的变量名(数组名)
(2)在初始化的时候,系统在堆里面根据初始化相应的方式开辟对应的数组长度的空间,即数组中的元素存储在堆里面
下面这张图很形象的说明了数组的存储,举了两例子分别是基本类型数组(int)和应用类型数组(类),基本类型是指基本的那八个数据类型,应用类型指类,接口或者是数组。
应用类型数组的实现代码:
//首先新建一个student类
public class student {
String name;
String id;
int age;
public void info(){
System.out.println("姓名:"+name+" ");
System.out.println("学号:"+id+" ");
System.out.println("年龄:"+age+" ")
}
}
//新建一个Reference 类
public class Reference {
public static void main(String[] args) {
student[] students; //定义了一个student类型的数组,数组名为students
students=new student[2]; //动态初始化students数组,数组长度为2
student s1=new student(); //实例化student类,对象名为s1
s1.name="张三"; //给s1中的属性赋值
s1.age=18;
s1.id="S001";
student s2=new student();//同上
s2.name="李四";
s2.age=19;
s2.id="S002";
students[0]=s1; //让students数组中的第一个元素指向s1这个对象
students[1]=s2; //让students数组中的第二个元素指向s2这个对象
s1.info(); //调用student类中的方法
}
}
在引用型数组这个例子中,当我们动态初始化students这个数组的时候,我们还不能直接去使用这个数组,因为这个时候堆中的元素时系统给的null值,只有当我们 实现students[0]=s1;时,相当于给数组中的第一个元素赋值,才可以使用这个数组。
值得注意的是,在数组中只能通过数组名来访问数组元素,失去了数组名的数组将会被系统回收。
5.“多维数组”:
谈到多维数组,其实是不存在多维数组这个概念的,它的本质是数组的引用类型。由上面4中的例子我们可以知道引用类型的数组可以引用类,接口和数组,在上面的例子中是引用了类,而所谓的“多维数组”则是引用了数组。二位数组其实是一维数组中的某一个元素又指向了另外一个数组,所以这样看起来就像是一个表格。
二维数组为例的语法格式:type[][] arrayName;