网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  java复杂数据类型用法     
  文章作者:未知  文章来源:水木森林  
  查看:57次  录入:管理员--2007-11-17  
 
  作者: builder.com

在这篇文章中,我们将讨论java语言中的复杂数据类型。其内容涉及到初始化过程、默认初值和某些针对复杂数据类型的操作。

索引



同简单数据类型的定义一样,java虚拟机(jvm)还定义了索引(reference)这种数据类型。索引类型可以“引用”变量,由于java没有明确地定义指针类型,所以索引类型可以被认为就是指向实际值或者指向变量所代表的实际值的指针。一个对象可以被多于一个以上的索引所“指”。jvm从不直接对对象寻址而是操作对象的索引。

索引类型分成三种,它们是:类(class)、接口(interface)和数组(array)。索引类型可以引用动态创建的类实例、普通实例和数组。索引还可以包含特殊的值,这就是null 索引。null 索引在运行时上并没有对应的类型,但它可以被转换为任何类型。索引类型的默认值就是null。




类(class)指的是定义方法和数据的数据类型。从内部来看,jvm通常把class类型对象实现为指向方法和数据的一套指针。定义class类型的变量只能引用类的实例或者null ,如以下代码所示:
myobject anobject = new myobject(); // 合法
myobject anotherobject = null; // 合法
myobject stillanotherobject = 0; // 非法


接口

接口(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
}
}


数组

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语言不支持结构(struct)或联合(union)数据类型。它的复合数据类型是通过类或者接口来构造的,类提供了捆绑数据和方法的方式,同时可以限制对类的私有数据的访问。比如说,如果用c语言,那么汽车(car)就可以如下代码所示用结构来定义:
struct car
{
char* model;
char* make;
int year;
engine* engine;
body* body;
tire** tires;
}

以上的示范代码还隐含采用了先前定义的引擎(engine)、车身(body)和轮胎(tire)结构。而采用java语言,汽车的定义如清单a所示。

以上的示例还假设我们以前都已经定义过carmodels和carmakes接口以及engine、body、tire、durangoengine、durangobody和goodyeartire类。


复合数据类型的初始化

复合数据类型由构造器内定义的代码实现初始化,构造器在类的创建函数(比如“new”之类)应用到类变量的时候被调用。构造器被调用之前,类的各个成员被初始化为各自的默认值或者显式赋予的初值。清单b 中的程序代码对以上过程进行了解释。

在清单b的代码中,当myclass 的实例用new 运算符创建时,构造器public myclass()即被调用促使类对自身初始化。初始化的过程如下所示:

声明“int myint;”给myint赋默认值0。
声明“anotherclass anotherclass;”给anotherclass分配默认值null。
构造器内的声明“myint = 2;”给myint赋值为2。
预定义复合数据类型

java语言包含了大量的预定义复合数据类型。其中之一的string 类属于java.lang 包。string 类提供的方法执行常用的字符串操作,比如length()、 substring(int beginindex)、touppercase()、tolowercase()、equals() 等等。另一种常用的java复合数据类型是vector 类,它属于java.util 包。vector 类定义的方法执行可扩展对象数组的常用操作。比如add(int index, object element)、elementat(int index)、isempty()和remove(int index)等。这些就是一小部分预定义复合数据类型的代表示例。在以后的文章里我们还会进一步对预定义复合数据类型进行讨论。


小结

除了简单数据类型之外,java语言中还定义了本文所讨论三种索引数据类型。java还运行开发人员自己用简单和索引数据类型组合起来创建复合数据类型。用户定义的组合数据类型和java预定义复合数据类型一道为程序员提供了强大的面向对象工具包。在接下来的文章里,我们会进一步详细地讨论大多数常用的复杂数据类型及其可用操作。我们会首先从java所特有的集合框架讲起。
 
 
上一篇: java嵌入式开发之j2me--五    下一篇: java高级多线程编程(一)--关于线程的停止问题
  相关文档
java 6新更新 jre环境和命令行开发工具 10-17
java中动态性实例解释 11-17
nutch在windows中安装之细解 11-17
实现在hibernate中的分页查询原理解读 11-16
springxml配置十二个最佳实践 11-17
java与javascript的通信lixiaolong3456 11-17
微软与sun达成协议 通过java推广msn工具栏 11-12
学习心得:java基本功之reference详解 11-17
野马的性格 java se 6.0新特性体验 11-17
使用ajax+j2ee实现一个网上会议室系统 11-16
用java开发组件 11-17
trusted applet的制作和运行 11-17
struts终结者?对比组件框架技术tapestry 11-16
java2的里程碑,j2se1.4.2and1.5 11-17
一起来学java吧 11-17
java中更新xml文档的常用方法 11-16
jsp最佳实践 11-17
spring中rod johnson 与“轮子理论” 11-17
在 netbeans 中为 tivo 开发应用程序 11-17
timertask与timer使用示范 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息