数据类型指的是一组值和一组对这些值的操作的集合。例如我们学过的int型,int的取值范围是 到 之间的整数,int的操作包括“+,×,-,/,%,<,>”。原则上来说所有的程序只需要使用原始数据类型就好,但是在更高层次上的抽象编写程序会更简单。这就引出了我们在这一节需要学习的重点,数据抽象(定义和使用数据类型)。
在具体开始讲解数据抽象之前我们还要引入一个概念,对象。Java编程的基础就是使用class关键字构造被称作引用类型的数据类型,这种编程风格也称作面向对象编程,因为他的核心是对象(保存了某个数据类型的值的实体)
抽象数据类型是一种对使用者隐藏数据的数据类型。在用Java类来实现抽象数据类型和用一组静态方法来实现一个函数库并没有什么不同,但抽象数据类型的主要不同之处在于它将数据和函数实现关联,并且将数据的表达方式隐藏起来。
- 1.2.1 使用抽象数据类型
加入我们要使用一种数据类型并不一定要知道它是如何实现的,所以我们先编写一个叫Counter的简单数据类型。Counter是一个计数器,它的值是一个名称和一个非负整数。它的操作:创建对象并初始化为0、当前值加1和获取当前值。要使用Counter对象首先要了解应该如何定义数据类型的操作,以及如何在Java中如何创建和使用某个数据类型的对象。 - 1.2.1.1 抽象数据类型的API
我们使用API(应用程序编程接口)来说明抽象数据的行为。它将列出所有构造函数和实例方法(即操作)并简要描述它们的功用。
尽管数据类型定义的基础是一组值得集合,但在API种可见的只是对他们的操作,而非他们的意义。和静态方法库的API一样,抽象数据类型的API也是和用例之间的一份契约,因此它是开发任何用例代码以及实现任意数据类型的起点。 - 1.2.1.2 继承方法
根据Java的约定,任意的数据类型都可以通过在API中包含特定的方法从Java的内在机制中获益。比如,Java中的所有数据类型都会继承toString
()方法来返回String表示该类型的值。Java会在用+运算符将任意数据类型的值和String值连接时调用该方法。 - 1.2.1.3对象
Counter heads;
通过上面这一行代码可以声明一个变量heads并将它和Conunter类型的数据关联起来。
那么我们如何对它进行操作或者是赋值?
这一个问题的答案和数据抽象中一个基础概念有关:对象是能承载数据类型的值的实体。无论是哪一个对象都有三大重要特征:状态、标识和行为。而对像的状态就是数据类型中的值;标识的作用是将一个对象区别于另一个对象(可以认为对象的标识就是它在内存中位置);对象的行为就是数据类型的操作。数据类型的实现的唯一职责就是维护一个对象的身份。 - 引用*是访问对象的一种方式。在Java中使用术语引用类型以示和原始数据类型的区别。不同的Java实现中引用的实现细节也各不相同,但是一般情况下可以认为引用就是内存地址。