当前位置: 首页 > 学习 > 电脑学习 > 程序设计 > JAVA > 设计模式 > 正文

面向对象编程:Java复杂数据类型用法

http://www.zk168.com.cn  招考学习网 2006-4-11 3:36:09
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
面向对象编程:Java复杂数据类型用法

   在这篇文章中,我们将讨论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()即被调用促使类对自身初始化。初始化的过程如下所示:

   1. 声明“int   myInt;”给myInt赋默认值0。
   2. 声明“AnotherClass   anotherClass;”给anotherClass分配默认值null。
   3. 构造器内的声明“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所特有的集合框架讲起。
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·实质、过程及意义——阿多尔诺“否定的辩证法”探微
·从Ontology的译名之争看哲学术语的翻译原则
·论马克思主义哲学经典的解释——解释学方法及其在马克
·中国哲学当前的核心与周边问题
·和合学与21世纪文化价值和科技
·中国文化的和合精神与21世纪
·宗教之间理当相互宽容
·上半个世纪的自由主义
·殷周至春秋时期神人关系之演进
·大学之道:构建以“三纲八目”为核心的道德修养体系
相关内容:
 
·环保企业人力资源开发与管理的实证研究————巨龙公
·重油制气污水处理系统(A/O)技术改造
·英美CPA管理模式及其启示
·改造NERA微波公务信道为国产监控信道
·EAStudio让电子商务网站如虎添翼
·基于PB6和ORACLE8开发“劳动信息管理系统”
·巧解Pretty  Park 病毒一例
·CDMA在中国的应用以及向CDMA2000的过度中的问题研究
·SMA施工控制与现场监理
·浅谈改性沥青及SMA路面平整度的控制
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>