§ 2.2 类、对象和方法
? 本节主要内容
– 类的定义
– 对象的创建
– 方法的定义
2.2.1类
? 类描述了一组有相同特性 ( 属性 ) 和相同行为 ( 方法 )
的对象 。
– 类声明
– [public][abstract|final] class className [extends
superclassName] [implements interfaceNameList]
{……}
– 其中,修饰符 public,abstract,final 说明了类的属性,
className为类名,superclassName为类的基类的名字,
interfaceNameList为类所实现的接口列表。
2.2.1类
? 类体定义的一般格式,
? class className
? {
? [public | protected | private ] [static] //成员属性
[final] [transient] [volatile] type variableName;
[public | protected | private ] [static] //成员方法
[final | abstract] [native] [synchronized]
returnType methodName([paramList])
[throws exceptionList]
{statements}
? }
? 成员变量的声明中限定词的含义
? static,静态变量(类变量),相对于实例变量
final,常量
transient,暂时性变量
volatile,贡献变量,用于并发线程的共享
2.2.1类
? java类中的访问限定权限
– 访问限定符是一组限定类、属性或方法是否可以被程序里的其他部
分访问和调用的修饰符。它规定了程序的哪些其他部分可以访问和
调用他们,哪些不可以。
– 类的访问控制符只有一个,public,属性和方法的访
问控制符有四个,分别为,public,private、
protected,private protected
2.2.1类
? java类中的访问限定权限
– 公共访问控制符 public
? 一个类被声明为公共类,表明它可以被所有的其他类
所访问和引用,这里的访问和引用是指这个类作为整
体是可见和可使用的,程序的其他部分可以创建这个
类的对象、访问这个类内部可见的成员变量和调用类
的可见的方法。
2.2.1类
? 私有访问控制符 private
– 用 private修饰的属性和方法只能被该类自身所访问
和修改,而不能被任何其他类(包括该类的子类)
来获取和引用。 private修饰符用来声明类的私有成
员,它提供了最高的保护级别。
– 例如在信用卡类 CreditCard中,信用卡的密码
password不能允许其他的类或对象随意查看或修改,
所以这个属性可以声明为私有的。
2.2.1类
? 保护访问控制符 protected
– 用 protected修饰的成员变量可以被三种类所引用:
该类自身、与它在同一个包中的其他类、在其他包
中的该类的派生类。使用 protected修饰符的主要作
用是允许其他包中的它的派生类来访问基类的特定
属性。
2.2.1类
? 私有保护访问控制符 private protected
– private和 protected按顺序连用构成一个完整的访问
控制符:私有保护访问控制符。用 private protected
修饰的成员变量可以被两种类访问和引用,一种是
该类本身,一种是该类的所有派生类,不论这些派
生类是与该类在同一个包里,还是处于其他的包中。
相对于 protected,private protected修饰符把同一包
内的非派生类排除在可访问的范围之外,使得成员
变量更专用于具有明确继承关系的类,而不是松散
的组合在一起的包中的所有类。
2.2.1类
? 缺省访问控制符
– 假如一个类没有声明访问控制符,说明它具有缺省
的访问控制特性。这种缺省的访问控制权规定该类
只能被同一个包中的类访问和引用,而不可以被其
他包中的类使用,这种访问特性又称为包访问性。
2.2.1类
? 程序中的访问控制区域
– 图中区域 D代表当前类本身,最大的矩形区域 A代表
所有类,区域 B代表与当前类在同一个包中的的所有
类(也包括当前类),区域 C代表当前类 D的所有子
类,区域 B与区域 C交界的公共区域 E代表当前类在
包中的子类 。
A, 所 有 类
B, 包 中 的 类
C, 所 有 派 生 类
D, 自 身 类
E, 包 中 派 生 类
D, 自 身 类
2.2.1类
? Java 中类、类的属性、类的方法访问控制权限(参
照图 2.2.1)

属性与方法
Public 缺 省
public A B
protected B + C B
缺省 B B
private protected C + D D + E
private D D
2.2.1类
? Java中类的限定词的作用范围
同一个类 同一个包 不同包的子类 不同包非子类
private 可以
default 可以 可以
protected 可以 可以 可以
public 可以 可以 可以 可以
2.2.2对象
? java语言中,对象就是对一组变量和相关方法
的封装,其中变量表明了对象的状态,方法表
明了对象具有的行为。
? 对象是系统中用来描述客观事物的一个实体,
它是构成系统的一个基本单位。一个对象由一
组属性和对这组属性进行操作的一组行为组成。
2.2.2对象
? 对象的 5大基本特征,
– 一切都是对象。
– 程序是一大堆对象的集合,他们通过消息传递来了
解各个对象要做些什么。
– 每个对象都分配有自己的存储空间,可容纳其他对
象。
– 每个对象都有一个数据类型
– 同一类的所有对象能接收相同的消息。
2.2.2对象
? 对象之间的关系
– 一个复杂的系统必然包括多个对象,这些对象间可
能存在的关系有三种:包含、继承和关联 。
– ① 包含关系
? B,.has.,A B类中的对象包含 A类的对象。当对象 A是
对象 B的属性时,称对象 B包含对象 A。
? 例如,每台计算机都包含一个 CPU,当把 CUP抽象成
一个计算机逻辑中的对象时,它与计算机之间就是包
含关系,即计算机包含了 CPU。
2.2.2对象
? ② 继承关系
– A,,is,,B A类继承了 B类,此时 A类不仅有了 B类的
方法,还加入了自己的方法。以便创建程序员自己
需要的对象。当对象 A是对象 B的特例时,称对象 A
继承了对象 B。
– 例如,便携式电脑是电脑的一种特例,台式电脑是
电脑的另一种特例。如果分别为便携式电脑和台式
电脑抽象出便携式电脑类和台式电脑类,则这两个
类与电脑类之间都是继承关系。
2.2.2对象
? ③ 关联关系
– B,,use,,A B类中的一个方法操作了另一个类 A中的对象。当对象
A的引用是对象 B的属性时,称对象 A和对象 B之间是关联关系。所
谓对象的引用是指对象的名称、地址、句柄等可以获取或操作该对
象的途径。
2.2.2对象
? 对象的生命周期
– 类实例化可生成对象,对象通过消息传递来进行交
互。消息传递即激活指定的某个对象的方法以改变
其状态或让它产生一定的行为。一个对象的生命周
期包括三个阶段:生成、使用和清除。
2.2.2对象
? 对象的生成
– 对象的生成包括声明和实例化
– 格式为,
? type objectName = new type([paramlist]);声明
? type objectName
? 声明并不为对象分配内存空间,而只是分配一个引用空间,对
象的引用类似于指针,是 32位的地址空间,它的值指向一个中
间的数据结构,它存储有关数据类型的信息以及当前对象所在
的堆的地址,而对于对象所在的实际的内存地址是不可操作的,
这就保证了安全性。
2.2.2对象
? 对象的使用
– 通过运算符,.”可以实现对变量的访问和方法的调
用。变量和方法可以通过设定访问权限来限制其它
外部对象对它的访问。
– 调用对象的变量格式
? objectReference.variableobjectReference
? 是一个已生成的对象,也可以是能生成对象的表达

2.2.2对象
? 对象的清除
– 当不再引用一个对象时,该对象就成为无用对象。
Java的垃圾收集器自动扫描对象的动态内存区,
把没有引用的对象作为垃圾收集起来并释放。
– System.gc( );
? 当系统内存用尽或调用 System.gc( )要求垃圾回收
时,垃圾回收线程与系统同步运行。
2.2.3 类、对象与实体之间的关系
? 对象的概念是面向对象技术的核心所在。以面向对象的观
点来看,所有的面向对象的程序都是由对象来组成的,这
些对象彼此间可以相互通信、协调和配合,从而完成整个
程序的任务和功能。三者的关系如下图,
抽 象
计 算 机 世 界
现 实 世 界
概 念 世 界
对 象

实 体
抽 象 数 据 类 型
抽 象
映 射
计 算 机 逻 辑 的 实 现
实 例 化
2.2.4 方法
? 1,方法体
– 方法体是对方法的实现,它包括局部变量的声明以
及所有合法的 Java指令。方法体中声明的局部变量
的作用域在该方法内部。若局部变量与类的成员变
量同名,则类的成员变量被隐藏。
– 示例 2.2.1 局部变量 z和类成员变量 z的作用域。(见
书 86页)
2.2.4 方法
? 2.方法的参数传递
– 参数传递有两种:传值和传引用两种,
? 传值,是指传递给方法的参数值只会修改方法内部的
局部变量的值,当方法调用完成后,该形式参数的值
不会影响到类变量的值。
? 传引用,是指将参数的地址传递给方法,方法内部修
改该传递进来的地址所对应的对象的相关属性的值。
这样方法就可以将地址中存放的数据值进行修改。
? 示例 2.2.2 简单数据类型与引用数据类型的区别。
(见书 88页)
2.2.5实例变量和类变量、实例方法和类方法
? 实例变量和类变量
– 每个对象的实例变量都分配内存,通过该对象来访
问这些实例变量,不同的实例变量是不同的。
– 类变量仅在生成第一个对象时分配内存,所有实例
对象共享同一个类变量,每个实例对象对类变量的
改变都会影响到其它的实例对象。
2.2.5实例变量和类变量、实例方法和类方法
? 实例方法和类方法
– 实例方法可以对当前对象的实例变量进行操作,也可以对类变量进
行操作,实例方法由实例对象调用。但类方法不能访问实例变量,
只能访问类变量。类方法可以由类名直接调用,也可由实例对象进
行调用。类方法中不能使用 this或 super关键字,其定义格式如下,
– static type classVar;//声明类变量
static returnType classMethod( paramlist ) //声明类方法
– {…
}
– 如果在声明时不用 static 关键字修饰,则声明为实例变量和实例方
法。
– 示例 2.2.3 实例变量和类变量的运用(见书 89页)
小结
? 通过本节学习,我们主要学习了如下内容,
– 类成员属性与类成员方法的定义
– 类与类属性以及类方法的访问控制权限
– 对象的创建
– 方法的调用