8.1 引言
学习过选择、循环、方法和数组解决很多程序设计问题。但是这些Java的特性还不足够用来开发图形用户界面和大型软件系统。假设希望开发一个GUI界面,本章开始介绍面向对象程序设计,它会有助于更有效地开发GUI和大型软件系统。
8.2 定义对象的类
面向对象程序设计(OOP)就是使用对象进行程序设计。对象(object)代表现实世界中可以明确标识的一个实体。每个对象都有自己独特的标识,状态和行为。
·一个对象的状态(state,也称之为特征(property)或属性(attribute))是指那些具有它们当前值得数据域。
·一个对象的行为(behavior,也称之为动作(action))是由方法定义的。调用对象的一个方法就是要求对象完成一个动作。
使用一个通用类来定义同一类型的对象,类是一个模板、蓝本或者说是合约。用来定义对象的数据域是什么以及方法是做什么的。一个对象是类的一个实例。创建实例的过程称为实例化(instantiation)。术语对象(obj)和实例(instance)经常是可以互换的。类和对象之间的关系类似于苹果配方和苹果派之间的关系。可以用一种配方做出任意多的苹果派来。
Java类使用变量定义数据域,使用方法定义动作。除此之外,类还提供一种称为构造方法(constructor)的特殊类型的方法。调用它可以创建一个新对象。构造方法本身是可以完成任何动作的,但是设计构造方法的初衷还是为了完成初始化动作。
8.4 使用构造方法构造对象
构造方法是一种特殊的方法。它们有以下三个特殊性:
1)构造方法必须具备和所在类相同的名字。
2)构造方法没有返回值,甚至连viod也没有。
3)构造方法是在创建一个对象使用new操作符时调用的,构造方法的作用是初始化对象。
8.5 通过引用变量访问对象
要给新创建的对象在内存中分配空间,它们可以通过引用变量来访问。
8.5.1 引用变量和引用类型
ClassName objectRefVar =new ClassName();
8.5.2 访问对象的数据和方法
在创建一个对象之后,它的数据和方法可以使用圆点运算符(.)来访问和调用,该运算符也称为对象对象成员访问运算符(object member access operator )。
·objectRefVar.dataFieId引用对象的数据域。
·objectRefVar.methd(参数)调用对象的方法。
8.5.3 引用数据域和NULL值
数据域也可能是引用型的。null是引用类型直接量。引用类型数据域的默认值是null,数值类型数据域的默认值是0,Boolean类型数据域的默认值是false,而char类型数据域的默认值是“\u0000”。
8.5.4 基本类型变量和引用类型变量的区别
每个变量都代表一个存储值得内存位置,声明一个变量时,就是在告诉编译器这个变量可以存放什么类型的值。对基本类型变量来说,对应内存所寸纯的值是基本类型值。对引用类型变量来说,对应内存所存储的值是一个引用,是对象的存储地址。
8.6 使用java库中的类
8.6.1 Data类
8.6.2 Random类
8.6.3 显示GUI组件
8.7 静态变量、常量和方法
实例变量时绑定到类的某个特定实例的,它是不能被同一个类的不同对象所共享的。
如果想让一个类的所有实例共享数据,就要使用静态变量(static variable),也称之为类变量(class variable)。静态变量将变量存储在一个公共的内存地址。
类中的常量是被该类的所有对象所共享的,因此常量应该声明为final static。
实例方法和实例数据都是属于实例的,所以它们在实例创建之后才能使用。它们是通过引用变量来问的。静态方法和静态数据可以通过引用变量或它们的类名来调用。
8.8 可见性修饰符
可以在类,方法和数据域前使用public修饰符,表示它们可以被任何其他的类访问,如果没有使用可见性修饰符,那么默认为类、方法和数据域是可以被同一个包中的任何一个类访问的。这称作包私有(package private)或包内访问(package—access)。
8.9 数据域封装
为了避免对数据域的直接修改,应该使用private修饰符将数据域声明为私有的,这就称为数据域封装(data field encapsulation).
在定义私有数据域的类外的对象是不能访问这个数据域的,但是经常会有客户端需要存取、修改数据域的情况,为了能够访问私有数据域,可以提供一个get方法返回数据域的值,为了能够更新一个数据域,可以提供一个set方法给数据域设置新值。
8.10 给方法传递对象参数
可以将对象传递给方法、同传递数组一样,传递对象实际上是传递对象的引用。java只有一种参数传递方式:值传递(pass by value)。
8.11 对象数组
网友评论