我们将针对Java语言中的复杂数据类型进行讲解。其中涉及到的内容有初始化过程、默认初值和某些针对复杂数据类型的操作。
1、数据类型的初始化
复合数据类型由构造器内定义的代码实现初始化,构造器在类的创建函数(比如”new”之类)应用到类变量的时候被调用。构造器被调用之前,类的各个成员被初始化为各自的默认值或者显式赋予的初值。清单B 中的程序代码对以上过程进行了解释。
在清单B的代码中,当myClass 的实例用new 运算符创建时,构造器public MyClass()即被调用促使类对自身初始化。初始化的过程如下所示:
声明”int myInt;”给myInt赋默认值0.
声明”AnotherClass anotherClass;”给anotherClass分配默认值null.
构造器内的声明”myint = 2;”给myInt赋值为2.
2、接口
接口(interface)好比一种模版,这种模版定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用。接口不能被实例化。类可以实现多个接口并且通过这些实现的接口被索引。接口变量只能索引实现该接口的类的实例。比方说,假设我们定义了一个接口,名字是Comparable ,同时还定义了一个类SortItem,这个类实现了接口Comparable,那么我们可以编写以下的定义代码:
Comparable c = new SortItem();
假如Comparable 接口定义了一个方法:public void compare(Comparable item), 那么SortItem 类就必须提供compare 方法的实现,如以下代码所示:
public class SortItem implements Comparable
{
public void compare(Comparable item)
{…method implementation here}}
3、类
类(Class)指的是定义方法和数据的数据类型。从内部来看,JVM通常把class类型对象实现为指向方法和数据的一套指针。定义class类型的变量只能引用类的实例或者null ,如以下代码所示:
MyObject anObject = new MyObject(); // 合法
MyObject anotherObject = null; // 合法
MyObject stillAnotherObject = 0; // 非法
4、索引
同简单数据类型的定义一样,Java虚拟机(JVM)还定义了索引(reference)这种数据类型。索引类型可以”引用”变量,由于Java没有明确地定义指针类型,所以索引类型可以被认为就是指向实际值或者指向变量所代表的实际值的指针。一个对象可以被多于一个以上的索引所”指”.JVM从不直接对对象寻址而是操作对象的索引。
索引类型分成三种,它们是:类(class)、接口(interface)和数组(array)。索引类型可以引用动态创建的类实例、普通实例和数组。索引还可以包含特殊的值,这就是null 索引。null 索引在运行时上并没有对应的类型,但它可以被转换为任何类型。索引类型的默认值就是null.
5、数组
Java数组(array)是动态创建的索引对象,这一点和类非常相似,此外,同类一样,数组只能索引数组的实例或者null ,如以下代码所示:
int[] myIntArray = new int[5];
int[] anotherIntArray = null;
数组是Object类的继承,这样,Object类的所有方法都可以被数组调用。数组对象由元素组成。元素的数目也可以为0,在这种情况下称做数组为空。所有的数组都是从0开始对元素编号的,这意味着数组内的第1个元素的索引编号是数字0.所有对数组元素的访问都会在运行时上接受检查,如果试图使用编号小于0或者大于数组长度来索引元素就会产生ArrayIndexOutOfBoundsException异常并被扔出。
数组的元素按整型值索引,如以下代码所示:
int[] myIntArray = { 9, 5, 6 };
int int1 = myIntArray[0];
int int2 = myIntArray[1];
int int3 = myIntArray[2];
数组对象的长度是不变的。为了改变数组变量的长度,你必须创建另一个数组并赋给变量,如以下代码所示:
int[] myIntArray = { 9, 5, 6 };
System.out.println(“myIntArray length = ” +myIntArray.length); // 输出结果是3
myIntArray = new int[] { 3, 6, 4, 2, 8 };
System.out.println(“myIntArray length = ” +myIntArray.length); // 输出结果是5
小结:除了简单数据类型之外,Java语言中还定义了本文所讨论三种索引数据类型。Java还运行开发人员自己用简单和索引数据类型组合起来创建复合数据类型。用户定义的组合数据类型和Java预定义复合数据类型一道为程序员提供了强大的面向对象工具包。