Java可以通过数组和容器来存放一组对象,数组的存储空间在初始化时已经确定且以后不能更改,因此数组不支持添加和删除操作,与之相反容器在创建以后可以动态的添加和删除。本文只讨论数组,容器将在后面的文章中讨论。
数组创建
数组既可以存放基本数据类型变量也可以存放对象。数组创建示例如下:
//数组创建示例
class Phone{
}
public class Test{
public static void main(String[] args){
//基本数据类型初始化
int i1[] = {1,2,3,4,5,6,7,8};
int i2[] = new int[2];
i2[0] = 1;
i2[1] = 2;
int i3[] = new int[] {1,2,3,4};
//对象类型初始化
Phone o1[] = {new Phone(), new Phone()};
Phone o2[] = new Phone[2];
o2[0] = new Phone();
o2[1] = new Phone();
Phone o3[] = new Phone[]{new Phone(), new Phone()};
}
}
数组访问
数组有三种访问方式:随机访问、foreach遍历数组、C语言风格遍历数组。下面将分别演示三种访问方法:
public class Test{
public static void main(String[] args){
int arr[] = {1,2,3};
System.out.println("随机访问数组");
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println("foreach遍历数组");
for(int i: arr){
System.out.println(i);
}
System.out.println("c语言风格遍历访问数组");
for(int i=0; i< arr.length; i++){
System.out.println(arr[i]);
}
}
}
/*
程序输出:
随机访问数组
1
2
3
foreach遍历数组
1
2
3
c语言风格遍历访问数组
1
2
3
*/
随机访问数组时,数组的下标范围是[0,length-1],即数组的第一个元素是array[0],最后一个元素是array[length - 1],如果下标不在这个范围内将引发错误。
数组是类吗?数组变量是对象吗?
一般有此疑问的人都使用过C/C++数组,在C/C++中数组不是类,其变量也不是对象, C/C++ 数组仅支持随机访问即下标访问操作。对于Java来说,数组是一个特殊的类,数组变量是对象,数组继承自Object类,除了Object类提供的成方法和数据以外,数组类只有一个成员变量length用来获取数组的长度。 下面的测试代码可以证实数组是类:
public class Test{
public static void main(String[] args) {
int arr[] = {1, 2, 3};
System.out.println(arr.getClass().toString());
System.out.println(arr.getClass().getSuperclass().toString());
}
}
/*
输出:
class [I
class java.lang.Object
*/
可以看到变量arr是“[I”类的一个对象,并且它的父类是java.lang.Object,在Java中java.lang.Object是任何类的父类。虽然类名“[I”看起来奇怪但它终究是一个类,我们无法找到它的定义,它是由虚拟机在运行时定义的。
最后
数组的随机访问效率很高,但是它不能动态的增删数据限制了它的使用场景,它只适用于存储数量固定的一组数据,我们称之为静态数据,如性别( 男、女)就可以使用数组来存储。
