《类与对象构建Java程序的基石.ppt》由会员分享,可在线阅读,更多相关《类与对象构建Java程序的基石.ppt(144页珍藏版)》请在三一办公上搜索。
1、第4章 类与对象:构建Java程序的基石,第 4 章 目 录,4.1 面向对象程序设计,4.5 static修饰符与静态成员,4.4 Java修饰符,Java程序的基本结构,4.3 实例对象,4.2 类的描述,重点与难点,经典练习题,4.6 类的方法成员,本章知识重点,构造方法。,this关键字。,类成员要素的访问控制修饰符。,static修饰符与静态成员要素。,面向对象程序设计的优越性。,本章知识难点,Java类成员要素的访问控制修饰符。,面向对象的特征:抽象、封装、继承、多态。,Java类的访问控制修饰符。,类与对象的关系。,4.1 面向对象的程序设计,4.1.2 面向对象的特征,4.1.
2、3 面向对象的程序设计的优越性,4.1.1 面向对象的基本概念,4.1.1 面向对象的基本概念,类,接口,包,对象,类与对象的关系,面向对象的基本概念:,4.1.1对 象,对象(Object):,(2)对象的基本特征,Java语言中,一切事物皆为对象。对象可以是有生命的个体,比如一个人,一只小鸟;对象也可以是无生命的实体,比如一台计算机、一只钟表。,(1)对象的概念,(3)举例说明,4.1.1对 象,(1)对象的概念:是一个应用系统中用来描述客观事物的实体,是具有特定属性(数据)和行为(方法)的基本运行单位,是类的一个特定状态下的实例。,(2)对象的基本特征:属性(property):又称为数
3、据域(变量实现),属性值规定了对象所有可能的状态。行为(behavior):也称为方法(函数实现),是指对象可以展现的外部服务,这组行为将会在一定程度上改变或影响对象的属性状态。,对象,例如1:灯泡(对象)。灯泡有其属性(静态方面),如功率、电流、发光颜色等;灯泡也有其行为或功能(动态方面),如点亮、熄灭、调亮、调暗等。,UML图示,例如2:冰箱。其属性有体积、容积、颜色等;其功能有制冷、保鲜、解冻等。,(3)举例说明:,对象,例如3:一名为“范冰冰”的学生对象。她应该具有的属性:学号、姓名、性别、年龄、学校、专业、班级等;她的行为方法应该有:学习、生活、运动、社交、考试等。,(3)举例说明:
4、,对象,(3)举例说明:比如灯泡(对象)。,图示中的矩形是一个UML(Unified Modeling Language)图,它清晰地描述了一个对象应有的基本元素。对象名。矩形上层外面的Type Name,这里的Type 是很严谨的定义。应该记住这样一个层次关系:Object Class ADT。对象提供的服务(方法或函数)。对象的一些行为所带来的效果映射成现实中的服务。在图示的矩形框下半部分的四个行为on()、off()、brighten()、dim(),表示此处的对象提供的服务有4种,可选择打开、关闭、调亮和调暗电筒的光源。,手电筒,类,类(Class),类:就是一组同类对象的集合。面向对
5、象的程序设计语言用class关键字来表示类。类的三大基本特性:封装性、继承性和多态性。,【详细说明】,类,类(Class),类是一种抽象的逻辑结构,而对象才是真正存在的物理实体。类的每个对象都包含有这个给定类定义的数据与行为,这些对象是从同一个模子中铸造出来的。,解说:可以将类看作是创建该类所有对象的一个模板或构造蓝图,一个个的对象就是依照这个模板或蓝图创建出来的,因此对象又可以称为类的实例对象,简称为类的实例。,类的概念,类(Class),类的概念:类是Java代码的基本组织模块,是用以描述一组具有共同属性和行为的对象的基本原型,是对这组对象的概括、归纳与抽象表达,它定义了本类对象所应拥有的
6、状态属性集及操作这组属性的行为方法集。,类与对象的关系,类与对象之间的关系,类似于数据类型与变量之间的关系;一个类可以生成无数个不同的对象,每个对象属性值不同,其状态也不同。,例如:可以用计算机模型与计算机实体之间的关系来更形象地说明类与对象之间的关系:将冯诺依曼计算机模型看作计算机类,则不同品牌的计算机实体就对应为一个个的实例对象。,类与对象的关系,类与对象的关系示例,计算机模型与计算机实体之间的关系:,接口,接口(Interface):,接口:就是观察某个类的一个角度。例如:某些电器可以遥控,“可遥控”就是一个接口。某些动物会游泳,“会游泳”就是一个接口。,说明:接口是一种只包含常量与抽象
7、方法的特殊的类,是Java语言用以实现类间多重继承功能的唯一手段。接口定义了一组特定功能的对外接口与规范,而并不真正实现这种功能,功能的实现留待给实现这一接口的各个类来完成。,包,包(Package):是用来容纳一组相关类与接口的容器(集合)。,程序包、子程序包、编译单元、类或接口构成了Java程序的逻辑组织结构;目录、子目录、文件在大多数Java运行平台下构成了Java程序的物理组织结构。程序包的作用:使得不同的类或接口的名字层次化,减少了类或接口名字的冲突,因此Java程序的重用更为方便。标准的 Java库分为许多程序包。常用的有:java.lang(自动引入)、java.applet、j
8、ava.util java.awt、java.io、java.sql。,面向对象编程(OOP),从问题域客观存在的事物出发,将这些现实世界的物理实体抽象成概念世界的抽象数据类,再进一步将这种抽象数据类转换为计算机世界的类(Class);类刻画出实体所具有的状态信息与所能发挥的功能信息,是创建对象时所遵循的模板(Template)。对类进行实例化,就生成一个个的对象,对象对应于各个具体事物,是程序运行过程中实际发挥作用的类的独立内存映像。借助于类与对象这两个面向对象程序中最基本的要素,按照尽可能符合人类自然思维的方式,来构造软件系统,这就是所谓的面向对象程序设计(OOP)。,OOP的逻辑过程,面
9、向对象设计分析的完整过程如图所示:,4.1.2 面向对象的特征,面向对象具有以下几个重要特征:,抽 象,封装性,继承性,多态性,抽 象,1.抽象(Abstraction):抽象的广义概念:从研究对象中提取与当前目标主题关系最密切的主要方面,而忽略掉与目标无关的那些方面或关系不大的细枝末节,从而更充分地注意与当前目标有关的方面,更明确地突出主题,这就是抽象。,类就是对客观实体的一种抽象。通过在不同程度上运行抽象原则,可以得到不同层次、不同详细程度的类。在面向对象中,抽象是指从特定的实例中抽取它们共同的性质特征,以形成一般化概念的过程。,图示4.3说明,抽象示例,下图阐述了如何由自然界众多的动物实
10、体出发,经过抽象的处理过程,最终得到动物这一概念。,封装,封装也可称为信息隐藏(Information Hiding),是通过对象的方法来访问与改变对象属性的一种机制。其实现的核心是将类的属性与相关的操作捆绑起来,包装成不可分割的、独立的对象实体,将内部的数据与实现细节尽可能隐蔽起来,使外部用户不能直接操纵对象的内部信息,只能通过对象对外提供的施加有一定限制的访问接口来使用对象。,封装的基本单元是类。封装机制组织了类外的代码随意访问类内的代码和数据,保证了数据与程序不受外部干扰,不被非法滥用,从而保证了类与对象的独立性。,2.封装性(Encapsulation):,封装示例,左图形象地说明了一
11、个类的封装原理。类对数据与行为的封装是借助于不同级别的访问修饰符来达到控制目的。,继 承,继承是指从已有的类中可以派生出若干个新类,已有类称为基类或父类,新类称为派生类或子类。子类将自动地获得基类的属性与方法,从而不需再重复定义这些属性与方法;当然子类还可以修改父类的方法或增加新的方法,从而使自己更适合特殊的需要。类之间的继承关系是现实世界中遗传关系的直接模拟。,图 示 说 明,3.继承性(Inheritance):,继 承,Apple,Orange,图1:is-a关系(继承关系),父类(基类、超类),is-a,烤香蕉,继 承,图2:has-a关系(组合关系),is-a,has-a,说明:上述
12、 has-a关系不属于类的继承关系,在此仅作了解。,多态性,4.多态性(Polymorphism):是指允许不同类的对象对同一消息作出各自的响应,即以统一的风格处理已存在的数据及相关的操作。多态性语言具有灵活、抽象、行为共享、代码共享的优势,较好地解决了应用程序中方法同名的问题。,多态:简单说就是指同一个符号或名字在不同情况下的不同解释。例如:除法运算符“/”。多态的体现形式:编译时多态(方法的重载实现)。运行时多态(方法的重定义实现)(说明:方法的重定义也称为方法的覆盖/重写)。,面向对象程序设计(OOP)的优越性,从面向过程到面向对象是程序设计技术的一个飞跃。人们之所以要采用面向对象的程序
13、设计技术,其目的在于:,提升程序的开发与运行效率。,提高代码的可重用性(或者称为复用性)。,按照与人类习惯思维方法一致的原则开发系统。,提高程序的可靠性与可维护性。提高程序的可扩展性。增强程序的可控制性。,总之,面向对象的程序设计,能够有效分解、降低问题的难度与复杂性,提高整个求解过程的可控制性、可监视性和可维护性,从而获得较高的开发效率与可靠效果。,4.2 类的描述,引入:类是用来定义对象的成员变量(数据域)与成员方法(功能接口),描述对象的状态与行为。Java程序将你要表达的实体或概念封装在类中,并由类来创建诸多的实例对象。应用程序的功能便是由各个类的实例对象,通过调用各类方法来实现的。,
14、Java的类由类头和类体构成,本节主要学习如何用Java语言将类表达出来。,4.2 类的描述,4.2.1 类的定义,4.2.2 属性声明,4.2.3 方法定义,4.2.4 构造方法,说明:习惯上,人们将属性的声明放在方法之前,但Java编译器对属性和方法的位置并无规定,二者出现的顺序可以任意进行组合穿插,在语法上都是有效的。,Java的类由类头和类体构成,本节主要学习如何用Java语言将类表达出来。,4.2.1 类的定义,1.类的声明格式,2.程序举例,4.2.1 类的定义,【例1】,【例2】,3.类的作用域,4.2.1 类的定义,1.类的声明:用来指定该类的访问修饰符、类的名称、父类名称及实
15、现接口等属性。声明类的完整形式为:,public abstract|final class extends implements 类的成员变量;构造方法;类的成员方法;,关键字及参数说明,类的定义,修饰符public、说明了类的属性,abstract与final为互斥的两个修饰符,不能同时出现于一个类的声明中。,关键字及参数说明:,关键字extends后面跟随着基类的名称。关键字implements后面跟随着类所实现的接口列表。带有 的项目为可选项目,只在必要时才出现。类体是类功能实现的主体,是Java语句的集合。语句块界定符“”标识出类体的有效范围。,关键字class后面跟随类名,类名为用户
16、定义的标识符,最好以意义完整且易于识别的英文单词或短句作为类名;类名应该能够描述出类的特征或作用,类名的第一个字母通常要大写,如果类名由多个单词组成,则每一单词的首字母一般都要大写。,类的定义(续1),public修饰符将生命为公共类,公共类的访问不受限制,其他类与任何对象都可以使用这个类。如出现,一般置于类声明语句的最前端。,public修饰符不出现时,系统默认该类为默认的包访问修饰符,顾名思义,这种类只能被同一包中的其他对象所使用,而不允许同一包之外的对象来访问。但这种类可以被其他类所继承。,abstract为抽象类修饰符,其作用是将类声明为一个抽象类。所谓抽象类是指该类无法完成实际功能,
17、不能生成实际对象,只能被其他类所继承。,final为最终类修饰符,其作用是将类声明为一个最终类。所谓类是指该类不能派生子类,它的功能已经完整,只能用来创建实例对象,不能被其他类所继承。,类的定义(续2),成员变量与成员方法为类的成员要素,简称为成员(Member),它们又分为静态/类的要素与对象/实例要素两类。构造方法是具有与类名相同名称的一种特殊方法,用来创建类的对象及对成员变量进行初始化。构造方法为可选项,当省略时,Java系统会按缺省方式定义空白的构造方法。,类定义示例,public final class Date/类的声明语句/类体定义 private int year;/年 pri
18、vate int month;/月 private int day;/日/初始化年、月、日值的方法 public void initDate(int y,int m,int d)/显示当前日期值的方法 public void showDate(),【例1】建立一个公共的最终类 日期类,其声明格式如下:,类定义程序举例,【例2】编写一个计算器类,可以实现加、减、乘、除四种运算。,计算器的属性(成员变量):存储运算结果的变量base,初值为0。此外还表示四种运算操作中的第一个运算的数据。计算器提供的功能(成员方法):分别为加法运算(add)、减法运算(minus)、乘法运算(multiple)、除
19、法运算(devide),可以通过函数(方法)实现。这四这种运算需要两个数据才能完成相应的操作,假设第一个数据已经在属性变量base中,方法中的形参变量给出第二个数据。此外,再增加一个读取运算结果(base)的方法getResult()。,解题思路:,类定义程序举例,【程序文件名】SimpleCalculator.javapublic class SimpleCalculator private double base=0;/数据成员,存储计算结果 public void add(double arg)/加法运算 base=base+arg;public void minus(double ar
20、g)/减法运算 base=base-arg;public void multiple(double arg)/乘法运算 base=base*arg;public void devide(double arg)/除法运算 if(arg=0)return;/除数为0的特殊情况base=base/arg;public double getResult()/取得计算结果 return base;,类的作用域,数据成员(类体中定义的变量)-在整个类中有效。方法成员-在整个类中有效。局部变量(类的方法中定义的变量)-只在定义它的方法中有效。形式参数-只在其所在的方法中有效。,3.类的作用域:,【说明】,在
21、类作用域中声明的形式参数或局部变量隐藏了同名的数据成员,但是可以使用前缀 this(关键字,代表当前对象)访问该数据成员。(在4.3节讲解),4.2.2 属性声明,2.成员变量(Member Variable):又称为属性(Attribute)或数据域(Data Field),用来描述类对象的数据特征。其声明格式如下:,成员变量修饰符;,展开后的声明格式:,public|protected|private static final transient volatile=,;,关键字及参数说明,属性声明举例,属性声明(续1),final用于成员变量时,是作为定义最终变量即常量的关键字。这类常量的
22、值不允许修改。,public、protected与private为成员要素访问修饰符,用来限制成员变量或成员方法的访问范围,即哪些类或对象可以访问此成员要素。,static用来指明成员要素为静态要素,又称类要素,以区别于对象要素。静态要素存在于类的定义区域中,属于类本身的成员,每个该类的对象共享这些要素。,transient(意为短暂的、瞬时的)为专门用于成员变量的修饰符,表明成员变量为临时变量。volatile(意为可变的、不稳定的)为专门用于成员变量的修饰符,声明一个被多个并发线程所共享的变量。,属性声明(续2),成员变量名为用户自定义的标识符,一般为有意义的英文单词或单词组合;变量名的第
23、一个字母小写,如果包含多个单词,则其他单词的首字母大写。,一个定义语句可以声明一个成员变量,也可以声明多个同类型的成员变量。不同类型的成员变量必须分别由不同的声明语句来定义。,属性定义示例,【例】定义一个包访问控制权限的学生类Student,该类继承自Person父类,其属性包含学号、姓名、性别、出生日期、电子邮箱、手机号码、QQ号码、通讯地址等。,class Student extends Person public String code;/学号 public String name;/姓名 public boolean sex;/性别 private Date birthDate;/出生
24、日期 private String Email;/电子邮箱 private String cellPhoneCode;/手机号码 private int QQCode;/QQ号码 private String address;/通讯地址/成员方法定义(略),类的定义代码如下:,4.2.3 类的成员方法,3.成员方法(Member Method):成员方法又称为功能接口(Function Interface),简称为方法(Method),是类对象与外界的接口,描述了类对象的行为方式,反应了对象的行为特征,特别是对属性进行操作的特征。成员方法对成员变量的操作主要体现在以下两个方面:,修改对象的属性
25、,一般记为 set 方法。,读取对象的属性,一般记为 get 方法。,(2)用法举例,(1)定义格式,成员方法的定义,(1)定义格式:,成员方法修饰符(参数列表)throws/方法体定义/用于描绘方法行为的Java语句,public|protected|private static final|abstract native synchronized(参数列表)throws,展开的定义格式为:,关键字及参数说明,成员方法的定义(续2),成员方法的方法原型:(参数列表),成员方法修饰符:,final声明成员方法为最终方法,即不允许派生子类去覆盖的方法。abstract声明为抽象方法。native
26、(意为本地的),指明方法为Java本地方法,即是指用C、C+等语言实现并可移植到JVM上运行的方法。sychronized(意为同步的),为专门用于构造方法同步的修饰符。,说明:,成员方法的定义(续3),throws 子句。称为声明抛出异常短语。如果定义的方法可能会产生自己不准备处理或无法处理的异常(异常为一种严重级别不高的错误),应该在方法定义语句的throws子句中声明抛弃该类异常,使得该类异常对象从调用的栈中向上传播,直到有合适的方法捕获到它并给予处理为止。,成员方法的定义举例,例如:定义一个描述圆的类Circle,该类具有设置圆半径radius值的私有方法 setRadius(),求取
27、圆的周长与面积的公共方法 getPerimeter()与 getArea()。,编写类定义的源代码程序:,成员方法的定义用法举例,类定义的源代码如下:,public class Circle/定义常量圆周率PI并赋初值 private final double PI=3.14159;private double radius;/圆的半径/设置圆半径值的方法 private void setRadius(double r)radius=r;/求取并返回圆的周长值的方法 public double getPerimeter()return 2*PI*radius;pubic double getA
28、rea()/计算圆面积的方法 return PI*radius*radius;,4.2.4 构造方法,构造方法(Constructor):也称为构造函数。构造方法是类用来创建对象、初始化类的属性的一种特殊方法,它本身不属于类的成员方法。,说明:Java中所有的类至少都要有一个构造方法,即使用户不明确地定义,系统也会为该类生成一个默认(缺省)的构造方法,这个默认的构造方法没有任何参数,且方法体为空。,接下来,我们详细学习构造方法的使用。,4.2.4 构造方法,(1)构造方法格式说明:,(2)构造方法用法程序举例:【例1】,(3)构造方法的重载:,扩展:方法的重载,(4)构造方法综合用法举例:【例
29、2】,构造方法格式说明(有7点),构造方法没有返回类型,也不允许返回void类型。,构造方法的方法名与类名完全相同(包括字母大小写)。,构造方法不允许用户直接调用,只能通过new关键字在创建对象时由系统调用。,构造方法用于创建对象时由系统自动调用,一般定义为public访问修饰类型或默认的包访问类型,极少有需要定义为private或protected访问类型的场合。,构造方法格式说明(续),构造方法可以继承,即子类能够继承父类的构造方法。,构造方法中可以使用super与this两个关键字来引用直接父类或自身对象。,一个类可以包含多个重载的构造方法,使用这些重载的构造方法创建不同对象时,通过参数
30、的不同来决定调用哪个构造方法。,构造方法程序举例,例1:定义一个立方体类Cube,该类具有长、宽、高三种属性,并具有初始化属性值的构造方法。此造方法与类名相同,无参数,无返回值。,class Cube private int length;private int width;private int height;public Cube()/没有参数的构造方法 length=0;width=0;height=0;,程序代码如下:,构造方法的重载,构造方法的重载:概念:是指定义多个构造方法,其参数列表不同。作用:是使类对象具有不同的初值,为类对象的初始化提供方便。程序举例:(1)阅读程序:Cons
31、tructor.java(2)在前面的Cube类的定义中,再增加两个重载的构造方法,分别用于对长、宽、高属性赋同一个值,或赋不同的指定值。【参考程序】,构造方法的重载程序举例,class Cube private int length;private int width;private int height;public Cube()/没有参数的构造方法 length=0;width=0;height=0;public Cube(int samevalue)/一个参数的构造方法 length=samevalue;width=samevalue;height=samevalue;public C
32、ube(int l,int w,int h)/三个参数的构造方法 length=l;width=w;height=h;,构造方法综合用法程序举例,【例4.1】(课本P76)定义图书类Book与主类Exa_4_1,Book类包含书名(title)、出版社(publisher)、作者(author)、定价(price)四个成员变量,两个构造方法(无参数、四个参数),一个显示图书信息的成员方法(bookOutline()。主类(包含main函数的类)的功能为生成两本书的实例对象,然后分别显示出这两本图书的基本信息。,说明:参考程序如下页所示。,构造方法程序举例,import javax.swing.
33、JOptionPane;/Book类定义class Book private String title;private String publisher;private String author;private float price;public Book()/无参的构造方法 title=;publisher=;author=;price=0.0F;,构造方法程序举例,/有参的构造方法 public Book(String bookName,String bookOwner,String writer,float cost)title=bookName;publisher=bookOwne
34、r;author=writer;price=cost;/显示书籍基本信息的成员方法 public void bookOutline()JOptionPane.showMessageDialog(null,书名:+title+n出版社:“+publisher+n作者:+author+n定价:“+price);,构造方法程序举例,/主类定义class Exa_4_1 public static void main(String args)Book book1,book2;/对象变量声明/用有参与无参的构造方法创建两个对象 book1=new Book(放牧心灵,生活出版社,无名氏,35.00F);
35、book2=new Book();book1.bookOutline();/显示每本书籍的概述 book2.bookOutline();,方法的重载,方法的重载(overload):是指在一个类中(包括子类)可以定义一些名称相同的方法(函数),通过定义不同的输入参数来区分这些方法,然后在调用时,JVM就会根据不同的参数样式,来选择合适的方法执行。程序举例:(1)MethodOverloadTest.java(2)在java.lang.Math类或String类中定义了重载的方法。思考:计算器类的加、减、乘、除四个方法可以进行重载。,方法的重载举例,class MethodOverload/定义
36、一个类/定义第一个方法 void max(int a,int b)System.out.println(ab?a:b);/定义第二个方法 void max(double a,double b)System.out.println(ab?a:b);,程序举例:methodOverloadTest.java,方法的重载举例,public class MethodOverloadTest/main方法进行测试 public static void main(String args)MethodOverload t=new MethodOverload();System.out.print(t.max
37、(44,55)=);t.max(44,55);System.out.print(t.max(2.5,6.3)=);t.max(2.5,6.3);,4.3 实例对象,知识引入:Java程序的基本组成单位是类,类定义了一种抽象数据类型。但是若一个程序仅由类定义组成,是无法完成任何功能的,要使用这个类就需要创建可以用于服务的类对象。利用类创建若干对象实例,让这些对象实例相互协作,能够完成指定功能。,4.3 实例对象,4.3.3 this关键字,4.3.4 get方法与set方法,4.3.1 对象的创建与初始化,4.3.2 对象的引用与使用,类与基本数据类型一样,能够声明具体的实例,这些实例就为对象。
38、类中定义的数据成员决定了该类的每一个对象实例的表示方法,方法成员决定了该类的每一个对象实例的可用操作。,应用举例,4.3.1 对象的创建与初始化,创建对象的步骤:,2.建立对象实体,3.初始化对象,1.声明对象引用变量,说明:实际应用中,更为常用的作法就是将以上三步合并在一起,直接创建对象。【举例】,4.3.1 对象的创建与初始化,1.声明对象引用变量,格式:;,例如:(1)声明两个立方体对象变量的语句:Cube obj1=null,obj2;(2)声明一个圆对象变量的语句:Circle obj3=null;,说明:null表示空对象引用的一种常量。,4.3.1 对象的创建与初始化,2.建立对
39、象实体,格式:=new 构造方法();,例如:(1)创建立方体对象实体的语句:Cube obj1,obj2;obj1=new Cube(50);(2)创建一个圆对象实体的语句:obj3=new Circle(0);,4.3.1 对象的创建与初始化,3.初始化对象,(1)通过赋值语句直接对对象的属性赋初值。,例如:obj3.radius=56.50;,初始化对象就是为对象设置初始状态,即为对象的数据成员赋初值。可用两种方式实现。,(2)通过类的构造方法初始化对象。,例如:obj2=new Cube(60,50,30);,说明:构造方法更安全、更规范的初始化对象的机制,为Java语言所推崇。方法(
40、1)虽然可行,但违背了面向对象编程的信息隐藏数据装的原则,不为Java所提倡。,4.3.1 对象的创建与初始化,实际应用中,更为常用的作法就是将以上三步(声明对象变量、建立对象实体、初始化对象)合并在一起,直接创建对象。,例如:Cube obj2=new Cube(60,50,30);Circle obj3=new Circle();,对象的创建与初始化的格式:=new 构造方法(参数列表);,说明:,4.3.2 对象的引用与使用,2.使用对象成员要素,1.引用对象实体,例如:Cube cubeobj1,cubeobj2=null;cubeobj1=new Cube(50,40,30);cub
41、eobj2=cubeobj1;,对象实体与对象变量,(2)调用对象成员方法的格式:.方法名(参数列表),(1)访问对象属性的格式:.,举例声明,实例对象的引用,对象实体(Object):是类映射在内存中的一块物理区域,该区域中存储着类所定义的成员的当前状态。,说明:一个对象可以被多个对象引用变量引用。一个对象引用变量某一时该只能指向一个特定的对象。,对象引用变量(Object Reference Variable):并不是对象本身,而是指向对象实体的符号标识,其值为一个32位的地址,该地址对应的存储空间为对象的物理存放区域。,代码举例说明,对象引用示例,例如下面的两行代码:Cube cubeO
42、bj1,cubeObj2=null;cubeObj1=new Cube(50,40,30);说明:(1)第一个语句声明了两个立方体对象引用变量并初始化第二个变量的值为null,即cubeObj2变量不引用任何对象,它的“地址”为空值;(2)第二个语句调用Cube类具有三个参数的构造方法,创建了一个实际的对象实体,并将对象的引用地址赋予对第一个变量。(如图4.5(a)所示。),(3)赋值语句:cubeObj2=cubeObj1;将变量cubeObj1指向的对象引用赋值给了cubeObj2变量,使得两个对象变量都指向同一个对象。(如图4.5(b)所示。),对象引用示例图,如同简单数据类型的变量之间
43、可以相互赋值,对象引用变量之间也可相互赋值。对象变量之间的赋值,并不重新生成对象的拷贝,而只是将一个对象变量的引用复杂给另一个对象变量,从而使它们最终都指向同一个对象实体的内存地址。,使用对象成员要素,对象创建后,就拥有了类的属性与方法的实例化副本,通过对象引用变量及点符号(.),便可以使用该对象,实现对对象属性与方法的访问。,例如:Circle circleObj=new Circle();circleObj.radius=38.25;double s=circleObj.getArea();System.out.println(“圆面积:”+s);,对象的创建与使用程序举例,例如:用计算器
44、类(SimpleCalculator)创建计算器对象及其运算的使用。,(1)编写一个测试类(SimpleCalculatorDemo),在其中创建计算器类的对象;(2)然后对象调用计算器类提供的加、减、乘、除方法完成相应的运算功能;(3)最后调用返回结果方法getResult()输出最后的运算结果。,【解题思路】,对象的创建与使用程序举例,public class SimpleCalculatorDemo public static void main(String args)/定义了一个momo计算器,初始值为0 SimpleCalculator momo=new SimpleCalcula
45、tor();/定义了一个popo计算器,初始值为0 SimpleCalculator popo=new SimpleCalculator();momo.add(5);/momo计算器加5 momo.minus(10);momo.multiple(3);momo.devide(0);/momo计算器除以0 popo.add(4);/popo计算器加4 popo.multiple(1);/查询momo和popo的计算结果 System.out.println(momo:+momo.getResult();System.out.println(popo:+popo.getResult();,程序代码
46、如下:,4.3.3 this关键字,1.概念:this是一种特殊的引用,它指向对象自身,表示对自身对象的一个引用。通过this这一引用,能够访问对象自身的成员数据,调用对象自身的成员方法。可以将this作为对象特殊的引用变量的名称,该变量可被访对象自身使用。,2.作用:(课本P80共4点)this关键字主要用于类的非静态成员方法(即实例方法)与构造方法中,而在静态方法(即类方法)中是不允许使用this关键字的。,3.用法举例:【改写例4.1】【例4.2】,4.3.3 this关键字用法举例,【例4.2】将前面Circle类(4.2.3类的方法成员举例)的定义补充完整,增加属性与方法;创建两个C
47、ircle对象,分别显示出两个对象的周长与面积。,【解题思路】,编写程序,程序文件名:Exa_4_2.java,(1)在一个程序文件中定义两个类:Circle类与主类。(2)在Circle类中声明属性:圆周率常量(PI)、圆心坐标(centreX、centreY)、半径(radius);定义三个重载的构造方法(无参数、两个参数、三个参数);定义五个成员方法:设置半径的方法(setRadius()、计算圆的周长与面积的方法(getPerimeter()、getArea()、显示圆的周长与面积的方法(dispPerimeter()、dispArea()。(3)在主类中创建Circle对象并初始化,
48、使用对象变量调用对象的方法,以显示周长与面积值。,this关键字用法程序举例,import javax.swing.JOptionPane;class Circle/圆类定义 final float PI=3.14159F;/定义圆周率常量 float centreX,centreY;/圆心坐标 float radius;/圆半径 public Circle()/无参构造方法 centreX=0.0F;centreY=0.0F;radius=0.0F;,程序文件名:Exa_4_2.java,this关键字用法程序举例,/重载的构造方法2 public Circle(float centreX,
49、float centreY)/参数与属性同名,赋值时属性要用this引用 this.centreX=centreX;this.centreY=centreY;radius=0.0F;/重载的构造方法3 public Circle(float ox,float oy,float r)this(ox,oy);/构造方法中调用其他的构造方法 radius=r;,this关键字用法程序举例,/成员方法,设置圆的半径 public void setRadius(float r)this.radius=r;/成员方法,求圆的周长 public float getPerimeter()return 2*PI
50、*radius;/成员方法,求圆的面积 public float getArea()return PI*radius*radius;,this关键字用法程序举例,/成员方法,显示圆的周长值 public void dispPerimeter()JOptionPane.showMessageDialog(null,圆的周长为:+String.valueOf(this.getPerimeter();/成员方法,显示圆的面积值 public void dispArea()JOptionPane.showMessageDialog(null,圆的面积为:+String.valueOf(this.get