java培训第5章.ppt

上传人:豆**** 文档编号:32921214 上传时间:2022-08-09 格式:PPT 页数:73 大小:1.46MB
返回 下载 相关 举报
java培训第5章.ppt_第1页
第1页 / 共73页
java培训第5章.ppt_第2页
第2页 / 共73页
点击查看更多>>
资源描述

《java培训第5章.ppt》由会员分享,可在线阅读,更多相关《java培训第5章.ppt(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、java培训第培训第5章章5.1.1 什么是面向对象什么是面向对象术语术语“面向对象面向对象”是由英文是由英文Object OrientedObject Oriented翻译而来的,简称为翻译而来的,简称为OOOO。面向。面向对象的程序设计是目前软件工业的主流,绝大多数的系统程序、应用程序对象的程序设计是目前软件工业的主流,绝大多数的系统程序、应用程序都是采用面向对象的思想来设计开发的。都是采用面向对象的思想来设计开发的。在面向对象概念中,整个世界是由各种各样的对象(在面向对象概念中,整个世界是由各种各样的对象(ObjectObject)组成的。世)组成的。世界上存在着许多类型相同的对象,也存

2、在着许多类型不相同的对象。例如:界上存在着许多类型相同的对象,也存在着许多类型不相同的对象。例如:一辆自行车和一根铅笔是类型不同的两个对象,而李明的自行车和李芳的一辆自行车和一根铅笔是类型不同的两个对象,而李明的自行车和李芳的自行车可以看作是类型相同的两个对象。自行车可以看作是类型相同的两个对象。早期的计算机程序设计语言经历了面向机器(早期的计算机程序设计语言经历了面向机器(Machine-OrientedMachine-Oriented)、面向)、面向过程(过程(Procedure-OrientedProcedure-Oriented)等阶段。随着计算机技术的发展,以及要解)等阶段。随着计算

3、机技术的发展,以及要解决的问题越来越复杂,早期的程序设计语言已经不能适应实际的需求。从决的问题越来越复杂,早期的程序设计语言已经不能适应实际的需求。从上个世纪上个世纪6060年代末,陆续开发出了多个面向对象的程序设计语言,例如:年代末,陆续开发出了多个面向对象的程序设计语言,例如:C+C+、JavaJava等。面向对象程序设计语言的出现带动了面向对象的程序设计方等。面向对象程序设计语言的出现带动了面向对象的程序设计方法。法。5.1.1 什么是面向对象什么是面向对象面向对象的程序设计是以要解决的问题中所涉及的各种对象为主体,力求面向对象的程序设计是以要解决的问题中所涉及的各种对象为主体,力求程序

4、设计符合人们日常的思维习惯,降低问题的难度和复杂性,提高编程程序设计符合人们日常的思维习惯,降低问题的难度和复杂性,提高编程的效率。使用面向对象的程序设计方法来解决问题就是从实际问题中抽象的效率。使用面向对象的程序设计方法来解决问题就是从实际问题中抽象并封装数据和操作的对象,通过定义其状态和操作其行为来表述对象的特并封装数据和操作的对象,通过定义其状态和操作其行为来表述对象的特征和功能。此外,还可以通过定义接口来描述对象的地位以及与其他对象征和功能。此外,还可以通过定义接口来描述对象的地位以及与其他对象的关系,最终形成一个广泛联系的可理解、可扩充、可维护及更接近于问的关系,最终形成一个广泛联系

5、的可理解、可扩充、可维护及更接近于问题本来面目的动态对象模型系统。题本来面目的动态对象模型系统。5.1.2 常用术语的含义常用术语的含义在面向对象程序设计中,经常使用一些术语,下面介绍几个常用的术语。(1)对象(Object):对象是面向对象程序设计的核心,也是程序的主要组成部分。一个程序实际上就是一组对象的总和。在现实世界中,人们面对的所有事物都可以称为对象,例如,电视、台灯、猫、狗、草木等等。在Java语言中,对象是由数据以及对数据进行处理的方法组成的,是对现实世界的抽象描述。在面向对象程序设计中,通过对象的状态(States)和行为(Behaviors)两个方面描述对象。每一个对象都是由

6、状态和行为两个最基本的部分组成的。虽然同一类对象的行为都是一样的,但是每个对象的状态都是独立与其他对象的。例如:改变速度是任何一辆自行车都具有的行为,但是每辆自行车的品牌、型号、颜色、所有者等状态又是不同。5.1.2 常用术语的含义常用术语的含义(2)类(Class):对象是由类创建的,类是同一类型对象的集合和抽象。例如,汽车有很多种类,包括轿车、卡车、公共汽车等。它们是不同的对象,但是都属于车类,存在着许多共同点,例如,都可以加速、刹车等。在Java语言中,每一个类是一种对象类型数据,属于不同类的对象具有不同的数据类型。一个对象被称为其类的一个实例,是该类的一次实例化的结果。例如:月饼模子可

7、以看作是月饼的类,使用模子做月饼的过程实际上就是一个实例化的过程,最终制作出的月饼是该月饼模子的一个对象。类还可以具有子类,子类除了具有类的所有状态和行为外,还具有自己特有的状态和行为。例如:哺乳动物类是动物类的一个子类,它除了具有动物类共有的状态和行为外,还具有胎生、哺乳等哺乳动物类特有的状态和行为。5.1.2 常用术语的含义常用术语的含义(3)域(Field):域是类或者对象的状态属性的总称。它可以是普通数据类型的变量,也可以是其他类的对象。例如,在自行车类中,品牌和颜色可以是String类型数据;型号可以是int类型数据;当前速度可以是double类型数据。在Java语言中使用实例变量来

8、表达类或者对象的状态,并且这些变量必须在类方法的外边定义,作用于整个类。(4)方法(Method):方法是类的行为属性的总称。一个类可以有多个方法,表示该类所具有的功能和操作。通过对象调用类中的方法就可以改变对象域中变量的值。例如:自行车类具有加速和减速的方法,通过一个自行车对象调用加速方法就可以改变对象中保存当前速度的实例变量的值。 5.1.3 程序设计过程程序设计过程使用面向对象方法解决问题的过程可以大体划分为面向对象分析(Object Oriented Analysis,简称OOA)、面向对象设计(Object Oriented Design,简称OOD)和面向对象编程(Object O

9、riented Programming,OOP)三大步骤。(1)面向对象分析(OOA)。面向对象分析的主要作用是明确使用程序的用户、用户可以进行的操作,以及数据的输入、输出和储存,并且用标准化的面向对象模型规范地表述这些内容,最后形成面向对象分析模型,即OOA模型。在分析问题时,要抽取所有需要的对象实体,然后确定这些对象的状态和行为,以及它们之间的相互关系。一般来说,解决一个问题会涉及到多个对象,所以这些对象之间的关系一定要明确,从而反映出整个程序的功能和状态。例如:自动取款机程序的使用用户包括银行和用户,它有可能涉及到的对象包括用户、帐户、自动取款机和提款卡等等。5.1.3 程序设计过程程序

10、设计过程(2)面向对象设计(OOD)。面向对象设计是将在面向对象分析步骤中创建的OOA模型加以扩展并得到面向对象设计步骤中的OOD模型。面向对象设计在OOA模型的基础上引入界面管理、任务管理和数据管理三部分的内容,进一步扩充OOA模型。界面管理负责整个系统的人机对话界面的设计,任务管理负责处理整个程序资源管理功能的工作以及设置客户与服务器之间的接口,数据管理负责设计程序与数据库的交换方式。面向对象设计还需要明确每个类方法的参数、返回值、功能等,以及各类之间的相容性和一致性的验证,对各个类、类内成员的访问权限的严格合理性的验证,也包括验证对象类的功能是否符合用户的需求。例如:自动取款机的OOD模

11、型要包括用户、帐户、自动取款机的人机对话界面设计,使用自动取款机的用户和自动取款机服务器之间的操作,自动取款机服务器与数据库之间的操作等等。5.1.3 程序设计过程程序设计过程(3)面向对象编程(OOP)。面向对象编程就是具体的程序编写阶段,其主要过程是先选择一种合适的面向对象编程语言,再用选定的语言编写程序实现设计步骤中对各个对象的详尽描述,然后将编写好的各个类根据其关系集成为整个程序,最后通过各种实例测试找出程序的漏洞并改善程序,最终完成整个软件的开发。 5.1.4 面向对象程序设计的特点面向对象程序设计的特点面向对象程序设计提高了软件的生产效率和程序模块的重复使用率,并且面向对象程序设计

12、提高了软件的生产效率和程序模块的重复使用率,并且降低了维护成本。面向对象程序设计的主要特点是:降低了维护成本。面向对象程序设计的主要特点是:(1 1)封装()封装(EncapsulationEncapsulation):封装就是将对象的数据和基于数据的方法):封装就是将对象的数据和基于数据的方法封装在一起成为一个整体封装在一起成为一个整体类。所有的程序编写基本上都是通过创建类类。所有的程序编写基本上都是通过创建类的对象,然后以对象为载体,进行数据交流和方法的执行。的对象,然后以对象为载体,进行数据交流和方法的执行。封装是一种数据信息隐藏技术,使用者只需要知道对象中变量和方法的功封装是一种数据信

13、息隐藏技术,使用者只需要知道对象中变量和方法的功能,而不必知道行为实现的细节,也就是说,类的使用者与设计者是分开能,而不必知道行为实现的细节,也就是说,类的使用者与设计者是分开的。此外,封装使得类的可重用性大为提高。的。此外,封装使得类的可重用性大为提高。(2 2)多态()多态(PloymorphismPloymorphism):多态是指程序的多种表现形式。在同一个类):多态是指程序的多种表现形式。在同一个类中,同名但参数不同的多个方法(方法重载)是多态的一种表现形式。另中,同名但参数不同的多个方法(方法重载)是多态的一种表现形式。另一种表现形式是子类对父类方法的覆盖或者子类对抽象父类中的抽象

14、方法一种表现形式是子类对父类方法的覆盖或者子类对抽象父类中的抽象方法的具体定义。的具体定义。5.1.4 面向对象程序设计的特点面向对象程序设计的特点(3 3)继承()继承(InheritanceInheritance):继承是指一个类拥有另一个类的所有变量和):继承是指一个类拥有另一个类的所有变量和方法。被继承的类称为父类,继承了父类的所有数据和操作的类称为子类。方法。被继承的类称为父类,继承了父类的所有数据和操作的类称为子类。继承使得程序结构清晰,降低编程和维护的工作量。继承使得程序结构清晰,降低编程和维护的工作量。(4 4)抽象()抽象(AbstractionAbstraction):抽象

15、是具体事物一般化的过程,即对具有特):抽象是具体事物一般化的过程,即对具有特定属性的对象进行概括,从中归纳出这一类对象的共性,并从共同性的角定属性的对象进行概括,从中归纳出这一类对象的共性,并从共同性的角度描述共有的状态和行为特征。度描述共有的状态和行为特征。抽象包括数据抽象和方法抽象两个方面。数据抽象用来描述某类对象的共抽象包括数据抽象和方法抽象两个方面。数据抽象用来描述某类对象的共同状态;方法抽象用来描述某类对象的共同行为。同状态;方法抽象用来描述某类对象的共同行为。 5.2.1 域域我们在前面介绍过域是类或者对象的状态属性的总称。它可以是普通数据我们在前面介绍过域是类或者对象的状态属性的

16、总称。它可以是普通数据类型的变量,也可以是其他类的对象类型变量。域常见的有实例变量、静类型的变量,也可以是其他类的对象类型变量。域常见的有实例变量、静态变量和最终变量态变量和最终变量3 3种形式。分别介绍如下。种形式。分别介绍如下。1 1实例变量实例变量实例变量(Instance Variable)用来储存某个类对象的状态值。它必须在类内、任何方法外被定义,一般位于整个类语句体的最前端。其修饰符可以是public或者private,但是不能使用static。实例变量的使用范围是整个类,也就是说可以在类中的任意方法内被使用。实例变量是依据其对象存在的,当运行程序创建对象的同时,创建了其实例变量,

17、当程序运行完成,对象消失,其实例变量也同时消失。5.2.1 域域变量name、age、gender、height和weight分别表示人的姓名、年龄、性别、身高和体重。当创建People类的对象时,每个对象的实例变量也是这5个变量,只是对象之间的变量值有可能不同。如图5.3所示为创建了3个People类对象的演示效果图。图5.3 3个People类对象5.2.1 域域2静态变量静态变量用修饰符用修饰符staticstatic修饰的变量称为类静态变量,也叫做静态变量或者类变量。修饰的变量称为类静态变量,也叫做静态变量或者类变量。静态变量是类的变量,不属于任何一个类的具体对象实例。它不保存在某静态

18、变量是类的变量,不属于任何一个类的具体对象实例。它不保存在某个对象实例的内存空间中,而是保存在类的内存空间的公共存储单元中。个对象实例的内存空间中,而是保存在类的内存空间的公共存储单元中。也就是说,不论一个类具有多少个对象,静态变量只有一个,任何一个类也就是说,不论一个类具有多少个对象,静态变量只有一个,任何一个类的对象访问它,取得的都是相同的数值。同样地,任何一个类的对象去修的对象访问它,取得的都是相同的数值。同样地,任何一个类的对象去修改它,也都是在对同一个内存单元进行操作。静态变量可以通过类名直接改它,也都是在对同一个内存单元进行操作。静态变量可以通过类名直接访问,也可以通过对象来调用。

19、采用这两种方法取得的结果是相同的。访问,也可以通过对象来调用。采用这两种方法取得的结果是相同的。 5.2.1 域域2静态变量静态变量静态变量与实例变量虽然都是在类内、类中方法之外定义的变量,但是它静态变量与实例变量虽然都是在类内、类中方法之外定义的变量,但是它们有着本质的不同。们有着本质的不同。(1 1)实例变量:一般使用)实例变量:一般使用privateprivate或者或者publicpublic作为修饰符。每个类的对象作为修饰符。每个类的对象都具有一套属于自己的、在类中定义的实例变量。每个对象只能修改或者都具有一套属于自己的、在类中定义的实例变量。每个对象只能修改或者访问其自身的实例变量

20、,不会影响其他对象的实例变量。访问其自身的实例变量,不会影响其他对象的实例变量。(2 2)静态变量:使用)静态变量:使用staticstatic修饰符。每个类的所有对象共同拥有一套类的修饰符。每个类的所有对象共同拥有一套类的静态变量。类和其对象都可以修改或者访问静态变量。静态变量。类和其对象都可以修改或者访问静态变量。 5.2.1 域域3最终变量最终变量在编写程序时,可以给某些经常要使用具有特殊含义或者内容复杂的常量,在编写程序时,可以给某些经常要使用具有特殊含义或者内容复杂的常量,取一个类似于变量名的标识符,这样就可以通过使用这个变量名称来引用取一个类似于变量名的标识符,这样就可以通过使用这

21、个变量名称来引用其对应的常量,而不是每次直接键入常量数值。这种做法的最主要目的是其对应的常量,而不是每次直接键入常量数值。这种做法的最主要目的是使程序更加清楚,利于其他人阅读、理解。使程序更加清楚,利于其他人阅读、理解。使用修饰符使用修饰符finalfinal修饰的变量是最终变量,其保存的数据在程序的整个执行修饰的变量是最终变量,其保存的数据在程序的整个执行过程中都不会改变。通常,我们在过程中都不会改变。通常,我们在finalfinal前面再加上修饰符前面再加上修饰符staticstatic,那么这,那么这个变量的实际含义就是常量。个变量的实际含义就是常量。如果在定义最终变量时,没有给其赋值,

22、则按该类型数据的默认值进行初如果在定义最终变量时,没有给其赋值,则按该类型数据的默认值进行初始化。始化。finalfinal修饰符可以修饰局部变量,也必须且只能赋值一次,它的取值修饰符可以修饰局部变量,也必须且只能赋值一次,它的取值在变量存在期间不会改变。在变量存在期间不会改变。此外,使用修饰符此外,使用修饰符volatilevolatile修饰变量被称为易失域,通常用于进行多线程修饰变量被称为易失域,通常用于进行多线程编程。这种变量可以同时被多个线程控制和修改变量值。编程。这种变量可以同时被多个线程控制和修改变量值。 5.2.2 构造方法构造方法构造方法(Constructor Method

23、),也称为构造函数,是一种特殊的方法。在创建对象的同时,调用这个对象所属类的构造方法来完成对象实例变量的初始化。构造方法的形式如下:public public 类名类名( ( 参数参数 ) ) 语句体语句体 其中的语句体为初始化实例变量的赋值语句,可以使用参数值作为变量的初值,也可以直接给变量赋具体的数值。一般来说,构造方法具有以下几个的特点:5.2.2 构造方法构造方法(1)构造方法的方法名与其所在类的名称相同。(2)虽然构造方法没有返回值,但是也不能有void关键字。(3)构造方法的修饰符总是public。(4)构造方法的主要作用是完成对类对象实例变量的初始化工作。例如,可以为People

24、类增加一个如下所示的构造方法public People()public People() name = name = 沈昕沈昕; age = 26; age = 26; gender = F; gender = F; height = 1.62; height = 1.62; weight = 55.5; weight = 55.5; 在上面的构造方法中,一共给5个实例变量赋了初值。当调用该构造方法时,就可以完成对5个实例变量的初始化。5.2.2 构造方法构造方法如果希望在创建对象时,其实例变量具有不同的初值,可以通过传递参数并将参数值赋给实例变量的方法来实现。构造方法的参数要与实例变量一一对

25、应,例如:People类的另一种构造方法为:public People( String initName, int initAge, char initGender,double initHeight, double initWeight ) name = initName; age = initAge; gender = initGender; height = initHeight; weight = initWeight;一般情况下,一个类中可以有一个或者多个构造方法,它们的方法名称相同但是参数不同,相当于方法的重载。我们将在后面具体介绍方法重载。5.2.3 方法方法除了构造方法外,类中

26、还有许多描述类行为的方法,这些方法可以分为实例方法和静态方法两种。1 1实例方法实例方法它属于每个对象,只能通过类的对象调用。实例方法用来定义某个类的行为,也就是说类的对象所能进行的操作。与实例变量一样,实例方法的修饰符可以是public或者private,但是不能用static。如果希望实例方法可以在类之外被访问,则使用public;如果希望实例方法只在类内被访问,则使用private。例如:在People类中,我们可以定义一个setName()方法用来改变People类某个对象的姓名,该方法内容如下。public void setName( String newName )public v

27、oid setName( String newName ) name = newName; name = newName; 5.2.3 方法方法2 2静态方法静态方法与静态变量类似,静态方法的本质是属于整个类的,而不属于某个实例对象。因为静态方法属于类本身,所以只要定义了类,它的静态方法就存在,就可以直接使用类来调用。在使用静态方法时要注意以下几个问题:(1)使用static修饰的静态方法是属于某个类的,它在内存空间中的内容将随着类的定义而进行分配和装载,不被任何一个对象所单独拥有。(2)静态方法不能操纵和处理属于某个对象的实例变量,而只能处理属于整个类的静态变量,也就是说静态方法只能处理静态

28、变量或者调用静态方法。(3)因为静态方法不能访问实例变量,所以在静态方法中不能使用关键字this。5.2.3 方法方法2 2静态方法静态方法(4)需要调用某个静态方法时,可以使用其所属的类的名称直接调用,也可以用类的某个具体的对象名调用,其形式为:类名.静态方法名;或者对象名.静态方法名;我们前面介绍的Math类中的abs()、max()等方法,以及Integer类中的parseInt()方法等就是静态方法,直接用类名进行访问。作为程序入口的main()方法必须要用static来修饰,也是因为Java运行时系统在开始执行一个程序前,并没有生成类的一个对象,它只能通过类名来调用main()方法作

29、为程序的入口。5.3.1 调用方法调用方法在完成类程序的编写后,就可以在其他程序中创建该类的对象,并调用该类的实例方法。注意,类的程序和使用类的程序要保存在同一个目录下。1 1调用构造方法调用构造方法如果在定义类对象时没有定义任何构造方法,系统会自动产生一个构造方法,无需定义,称为默认构造方法。默认构造方法不带任何形式的参数,并且方法体为空。例如,如果上面的People类没有定义构造方法,则系统产生的默认构造方法如下:People() People() 5.3.1 调用方法调用方法如果要使用People类的构造方法创建People类对象,则必须使用关键字new,例如,下面两种方法都可以定义Pe

30、ople类的对象。其中关键字new后边为所调用的People类的第一种构造方法。People p1, p2;People p1, p2;p1 = new People();p1 = new People();p2 = new People();p2 = new People();或者People p1 = new People();People p1 = new People();People p2 = new People();People p2 = new People();创建的对象p1和p2的示意图如图5.4所示。显而易见,对象p1和p2具有相同的姓名、年龄、性别、身高和体重。5.3.

31、1 调用方法调用方法图5.4 使用第一种构造方法创建对象图5.4 使用第一种构造方法创建对象5.3.1 调用方法调用方法如果使用People类中带有参数的第二种构造方法,则可以创建实例变量不相同的对象。例如,使用下面的语句创建对象p1和p2,其实例变量示意图如图5.5所示。People p1 = new People( People p1 = new People( 沈昕沈昕, 26, F, 1.62, 55.5 );, 26, F, 1.62, 55.5 );People p2 = new People( People p2 = new People( 宁普宁普, 17, M, 1.82,

32、75.2 );, 17, M, 1.82, 75.2 );图5.5 使用第二种构造方法创建对象5.3.1 调用方法调用方法图5.5 使用第二种构造方法创建对象图5.5 使用第二种构造方法创建对象5.3.1 调用方法调用方法当然我们也可以使用带有参数的构造方法创建一个对象,再使用不带参数的构造方法创建另一个对象。例如,使用下面的语句创建对象p1和p2,其实例变量示意图如图5.6所示。People p1 = new People();People p1 = new People();People p2 = new People( People p2 = new People( 肖琳肖琳, 48,

33、F, 1.55, 41.8 );, 48, F, 1.55, 41.8 );图5.6 两种构造方法混合使用创建对象5.3.1 调用方法调用方法2 2调用实例方法调用实例方法在调用某个类中的实例方法之前,要先创建该类的对象,然后通过该对象并且使用符号“.”来调用所要访问的实例方法。例如,下面是某个程序中的两条语句。People p1 = new People();p1.setName( 李芳 );其中,第一条语句是调用People类的第一种构造方法来创建对象p1,第二条语句是通过对象p1调用setName()方法来改变对象p1实例变量name的值。对象p1实例变量值前后变化的示意图如图5.7所示

34、。图5.7 setName()的作用5.3.1 调用方法调用方法3 3toString()toString()方法方法在实例41的Rectangle类中,定义了一个toString()方法,其返回值为对象的信息,一般使用打印语句将该信息显示在屏幕上。在Java语言中toString()方法是一个具有特殊含义的方法,一般用一个字符串来描述对象的信息。使用System.out.println()方法来打印对象的信息时,不需要明确地调用toString()方法,只要写出对象的名称即可。例如:假设在应用程序中,已经创建了两个Rectangle类的对象r1和r2,则显示其具体信息的打印语句可以写为:Sy

35、stem.out.println( System.out.println( 第一个矩形的信息:第一个矩形的信息: + r1 ); + r1 );System.out.println( System.out.println( 第二个矩形的信息:第二个矩形的信息: + r2 ); + r2 );5.3.2 访问方法访问方法3 3toString()toString()方法方法当遇到对象名r1和r2时,系统会自动调用其相应的toString()方法,打印的效果与下面的打印语句完全相同。System.out.println( System.out.println( 第一个矩形的信息:第一个矩形的信息:

36、 + r1.toString() ); + r1.toString() );System.out.println( System.out.println( 第二个矩形的信息:第二个矩形的信息: + r2.toString() ); + r2.toString() );Java语言提供的大多数类都具有toString()方法,用户可以直接调用,而不需要自行编写额外的语句来显示对象的信息。 5.3.2 访问方法访问方法1 1修饰符修饰符publicpublic和和privateprivate对于类中的实例变量和实例方法,一般使用修饰符public或者private。(1)public:表示该实例变

37、量或者实例方法可以在其所在的类的内部或者外部被访问和调用。大多数情况下,我们定义实例方法为public。(2)private:表示该实例变量或者实例方法只可以在其所在的类的内部被访问和调用。大多数情况下,我们定义实例变量为private。如果我们定义实例变量为public,则可以通过对象直接修改该变量。如果实例变量的修饰符为private,则必须在其所在类中添加一个实例方法来修改变量的值。很显然将实例变量的修饰符设置为public后,可以更方便地在应用程序中改变变量的值。但是为什么大多数程序都将实例变量定义为private,然后再通过实例方法来改变其值呢?我们以实例41中的Rectangle.

38、java程序为例来解释原因。5.3.2 访问方法访问方法1 1修饰符修饰符publicpublic和和privateprivate如果将程序内的实例变量width和length的修饰符改写为public,那么在应用程序中,我们可以通过创建Rectangle类的对象r1来访问这两个实例变量。假设应用程序中有下面这样两条语句:r1.width = -20;r1.width = -20;r1.length = -35r1.length = -35实例变量width和length的值改变为-20和-35,一个矩形的宽度和长度值为负数是不符合常理的。但是因为变量width和length的修饰符是publ

39、ic,所以无法限制其他应用程序在调用这两个变量时,赋予其数值的范围。如果将变量width和length的修饰符设置为private,则我们可以通过在Rectangle类中添加如下的实例方法来控制变量width和length中的数值。5.3.2 访问方法访问方法public void setWidth( int newWidth )public void setWidth( int newWidth ) if ( newWidth 0 ) if ( newWidth 0 ) width = newWidth; width = newWidth; else else width = 0; widt

40、h = 0; public void setLength( int newLength )public void setLength( int newLength ) if ( newLength 0 ) if ( newLength 0 ) length = newLength; length = newLength; else else length = 0; length = 0; 其中的参数newWidth和newLength是其他应用程序赋予变量width和length的值,当该值大于零时,变量width和length保存该值;当该值小于等于零时,变量width和length的值为零

41、。这就保证了不会出现矩形宽度和长度值为负数的情况。5.3.2 访问方法访问方法2 2访问方法访问方法访问方法(Accessor Method)是类中一种可以修改和获取private实例变量值的实例方法。为了与其他实例方法区别,一般使用set或者get再加实例变量名称作为该方法的名称。比如,setName()表示修改实例变量name的值;getHeight()表示获取实例变量height的值。该方法的修饰符必须为public。在编写Rectangle类时,并不是必须具有以上所有的访问方法,可以根据用户的需求范围来确定添加哪些访问方法。例如,用户要求矩形的位置是固定的,只能改变其宽度和长度,那么就

42、不需要setX()和setY()方法。此外,这些方法的内容并不是固定的,以上所给出的只是其最简单的语句体。根据要用户要求,方法中内容可以随意更改。例如,前面介绍的setWidth()方法和setLength()方法。 5.3.3 方法重载方法重载方法的重载是指在同一个类中,定义方法名称相同但参数不同的多个方法。当调用某个重载的方法时,Java会根据参数的类型、个数和顺序的不同,调用与之相符的方法。例如,在Math类中,许多方法都是有重载的,例如:求绝对值方法abs()就有double、float、int和long四种不同的参数类型。再比如,前面介绍的构造方法,也是方法名称相同但参数不同。每个重

43、载方法中的语句体可以相同也可以不同。5.3.4 this1 1关键字关键字thisthis的作用的作用当需要在类的实例方法中,指向调用该实例的对象时,可以使用关键字this。在大多数情况下,关键字this不是必须使用的,可以被省略。例如:Rectangle类中的setPosition()实例方法可以被写成如下形式:public void setPosition( int newX, int newY )public void setPosition( int newX, int newY ) this.x = newX; this.x = newX; this.y = newY; this.y

44、 = newY; 其中,this表示当前调用该方法的Rectangle类对象。5.3.4 this1 1关键字关键字thisthis的作用的作用如果在应用程序中的语句为:r1.setPosition( 100, 200 );r1.setPosition( 100, 200 );则在执行setPosition()方法时,关键字this代表调用该方法的对象变量r1。如果在应用程序中的语句为:r2.setPosition( 70, 10 );r2.setPosition( 70, 10 );则在执行setPosition()方法时,关键字this代表调用该方法的对象变量r2。事实上,如果在setPo

45、sition()方法中不使用关键字this,程序同样可以正常地编译和运行,所以在类似这种情况下可以忽略使用this。在Java语言中,系统会自动在调用所有实例变量和实例方法时与this关键字联系在一起,因此,使用this在某些情况下是多余的。5.3.4 this1 1关键字关键字thisthis的作用的作用如果在应用程序中的语句为:r1.setPosition( 100, 200 );r1.setPosition( 100, 200 );则在执行setPosition()方法时,关键字this代表调用该方法的对象变量r1。如果在应用程序中的语句为:r2.setPosition( 70, 10

46、);r2.setPosition( 70, 10 );则在执行setPosition()方法时,关键字this代表调用该方法的对象变量r2。事实上,如果在setPosition()方法中不使用关键字this,程序同样可以正常地编译和运行,所以在类似这种情况下可以忽略使用this。在Java语言中,系统会自动在调用所有实例变量和实例方法时与this关键字联系在一起,因此,使用this在某些情况下是多余的。2 2关键字关键字thisthis最常见的应用最常见的应用关键字this最常见的应用是在类的构造方法和实例方法中解决局部变量与实例变量同名的问题。例如,下面一段程序:public class P

47、eople private String name; private int age; private char gender; private double height; private doublet weight; public People( String name, int age, char gender, double height, double weight ) name = name; age = age; gender = gender; height = height; weight = weight; 在上面的一段程序中,共有name、age、gender、heig

48、ht和weight5个实例变量。在构造方法中的5个参数的变量名称与实例变量的名称一一对应相同。在参数名或者局部变量名与实例变量同名的时候,由于参数变量和局部变量的优先级高,所以在方法体中参数名或者局部变量名将隐藏同名的实例变量。这种情况在Java语言中是不被允许的。如果想使实例变量和方法的参数或方法本身定义的局部变量同名的话,就需要用一种方法使实例变量与和其同名的方法参数或局部变量区分开来,这就要使用到this关键字。下面的一段程序改写了上面的程序,使People类的构造方法可以合法地使用与实例变量名称相同的参数。public class People private String name;

49、 private int age; private char gender; private double height; private doublet weight; public People( String name, int age, char gender, double height, double weight ) this.name = name; this.age = age; this.gender = gender; this.height = height; this.weight = weight; 其中,使用this调用的都是实例变量,例如:this.name,而

50、name是参数变量。由上面的实例,我们可以看出,this在方法体中用来指向调用当前正在执行方法的对象。当然我们也可以通过使用与实例变量名不同的参数名或者局域变量名来避免这个问题。3 3在构造方法中使用在构造方法中使用thisthis调用另一个构造方法调用另一个构造方法关键字this还有一个用法,就是在构造方法的第一条语句使用this语句,它的形式是this(参数),这个构造方法就会调用同一个类的另一个构造方法。例如,下面的程序:public class People private String name; private int age; private char gender; priva

展开阅读全文
相关资源
相关搜索

当前位置:首页 > pptx模板 > 企业培训

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁