在这篇文章中,我们将讨论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所特有的集合框架讲起。

转载于:https://www.cnblogs.com/liuzhuqing/archive/2010/12/13/7481201.html

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

  1. 【java学习】 面向对象编程+java购物车系统

    文章目录 一.设计对象 二.内存机制 三.购物车系统 四.构造器 构造器 this关键字的作用 一.设计对象 类和对象是什么? 类:是共同特征的描述(设计图); 对象:是真实存在的具体实例; 如何设计 ...

  2. 面对对象课程设计报告java,面向对象编程 JAVA编程综合实验报告.doc

    PAGE \* MERGEFORMAT 20 成绩: JAVA编程B综合实验报告 实验名称:面向对象编程 实验时间:2012年 5月 31日星期四 JAVA编程B综合实验报告 一.实验名称 面向对象编 ...

  3. python编程求导数_面向对象编程 —— java实现函数求导

    首先声明一点,本文主要介绍的是面向对象(OO)的思想,顺便谈下函数式编程,而不是教你如何准确地.科学地用java求出函数在一点的导数. 一.引子 defd(f) :defcalc(x) : dx= 0 ...

  4. java 求导函数_面向对象编程 —— java实现函数求导

    文章目录 首先声明一点,本文主要介绍的是面向对象(OO)的思想,顺便谈下函数式编程,而不是教你如何准确地.科学地用java求出函数在一点的导数. ★引子 defd(f) :defcalc(x) : d ...

  5. 面向对象编程java小游戏_JavaScript面向对象编程小游戏---贪吃蛇代码实例

    1 面向对象编程思想在程序项目中有着非常明显的优势: 1- 1 代码可读性高.由于继承的存在,即使改变需求,那么维护也只是在局部模块 1-2 维护非常方便并且成本较低. ​2 这个demo是采用了面向 ...

  6. 面向对象编程JAVA——泛型

    文章目录 问题引入 泛型入门 泛型的好处 泛型说明 泛型的语法 泛型的声明 泛型的实例化 使用细节 练习 问题引入 请编写程序,在ArrayList中添加3个dog对象,dog对象中含有name和ag ...

  7. java实验Java面向对象编程_Java实验项目 面向对象编程.doc

    Java实验项目 面向对象编程 Java实验项目二 面向对象编程 第1部分 类与对象 [实验目的] 熟悉Java面向对象程序设计的基本思想. 掌握类与对象的定义及使用方法. 掌握package语句与i ...

  8. 面向对象编程思想概览(三)继承

    一.简介 本讲以大家耳熟能详的<西游记>中的唐僧师徒四人为例,介绍了类的继承的概念和实现方法,总结了继承的特性和优点,帮助同学们理解面向对象编程中继承的用法,进而掌握面向对象程序设计的基本 ...

  9. 如何利用函数指针在c语言中实现面向对象编程

    面向过程编程 c语言,是一种函数流语言,看他的代码,大部分是call1(data), call2(data)类似的代码.所以他的主体思想是函数,把数据丢进去给函数执行. 面向对象编程 java语言,和 ...

最新文章

  1. 005-算法-分治法
  2. shownews.php,newsshow.php
  3. 67、ulimit的使用
  4. c语言指针代码大全,C语言之指针(示例代码)
  5. 内核并发控制---中断屏蔽 (来自网易)
  6. Disney牵手联想发布AR头显,还有配备激光剑的AR游戏《星球大战》
  7. 智能优化算法应用:基于麻雀搜索算法与非完全beta函数的自适应图像增强算法 - 附代码
  8. OFFICE技术讲座:连续内容分断的规则
  9. 最强的linux命令总结.pdf
  10. python 读excel每行替换_Python使用openpyxl读写excel文件
  11. chrome浏览器安装vue插件
  12. CAD工具:PCB绘制、仿真软件
  13. 有些MP4只有音频没有视频的解决办法
  14. 工信部教育与考试中心-软件测试工程师考试题A卷-答
  15. 图片RGB转换为HSV
  16. Unsupervised Domain Adaptation via Structurally Regularized Deep Clustering-CVPR2020
  17. 初学Java常用设计模式之——单例模式
  18. 1688关键字搜索商品
  19. 简单说明JSP和Java的关系_JSP 总结
  20. 案例部署——GlusterFS分布式文件系统群集

热门文章

  1. java多线程 线程安全_Java中的线程安全
  2. android实例教程_Android ConstraintLayout示例教程
  3. 带有第三方工具的Spring Boot Initilizr
  4. 迅捷cad_迅捷结构
  5. java 合并两个列表_如何在Java中合并两个列表?
  6. 浅析C++开发工程师的薪资与发展
  7. 进程管理 systemctl控制
  8. spingboot视图层实例(JSP+Freemaker)以及自定义配置读取
  9. JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)...
  10. Android 逆向分析(三)之动态调试Smali