教学面向对象程序设计标准课件_第1页
教学面向对象程序设计标准课件_第2页
教学面向对象程序设计标准课件_第3页
教学面向对象程序设计标准课件_第4页
教学面向对象程序设计标准课件_第5页
已阅读5页,还剩343页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

教学课件面向对象程序设计教学课件面向对象程序设计1(优选)第教学课件面向对象程序设计(优选)第教学课件面向对象程序设计2几个概念:程序、程序设计语言、程序设计方法

程序:是一组有序指令的集合,由某种程序设计语言编写而成。程序设计语言:是人与计算机之间进行交流的工具。是由字、词和语法规则构成的指令系统。几个概念:程序、程序设计语言、程序设计方法程序:是一组有序3程序设计语言1.机器语言:是计算机能够直接执行的二进制指令代码,每条指令都用0和1组成的序列串表示,这些指令的集合就是指令系统。如加法运算:10110110。2.汇编语言:主要由汇编指令构成,这些汇编指令与机器语言的二进制指令一一对应。如加法运算:ADD。注意:机器语言和汇编语言都是面向机器的程序设计语言,它们与计算机的硬件紧密相关。程序设计语言1.机器语言:是计算机能够直接执行的二进制指令代4程序设计语言3.高级语言:FORTRAN语言和随后出现的BASIC语言、Pascal语言、COBOL语言以及C语言等等,都被称为高级语言。程序员在使用高级语言编写程序时,不需要熟悉计算机的指令系统,可以将精力集中于解题思路和方法上。如加法运算:+。计算机不能直接执行高级语言程序,必须先翻译成为机器语言程序之后才能执行。程序设计语言3.高级语言:5程序设计方法程序设计方法是独立于具体程序设计语言的一门技术。由于程序设计通常离不开程序设计语言作为工具,所以容易混淆程序设计方法与程序设计语言的概念。程序设计语言的设计目的主要是为了支持某种程序设计方法。程序设计方法程序设计方法是独立于具体程序设计语言的一门技术。6程序设计方法1.早期的程序设计方法:早期的高级程序设计语言有FORTROM、COBOL、BASIC等。这一时期由于追求程序的高效率,程序员过份依赖技巧与天份,不太注重程序的结构,一个典型问题是程序中的控制随意跳转,即不加限制地使用goto语句,这样的程序对阅读者来说是难以理解的,程序员也难以修改程序。程序设计方法1.早期的程序设计方法:7程序设计方法2.结构化的程序设计方法:随着程序规模与复杂性的不断增长,20世纪60年代诞生了结构化程序设计方法。结构化程序设计方法的主要技术是自顶向下、逐步求精,采用单入口/单输出的控制结构。这一程序设计方法的代表语言是Pascal、C等。程序设计方法2.结构化的程序设计方法:8结构化的程序设计方法结构化程序设计方法的基本思路是,把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。具体说,采取以下方法保证得到结构化的程序:(1)自顶向下;(2)逐步细化;(3)模块化设计;(4)结构化编码。结构化的程序设计把程序的结构规定为顺序、选择和循环三种结构,限制使用GOTO语句,并采用了自顶向下、逐步求精的分析和设计方法,即功能分解法,这种方法将需求空间视为一个功能模块,该模块又进行分解,生成多个小的功能模块,重复分解,直至每个模块具有明确的功能和适当的复杂度,而每个模块的功能实现都由上述三种基本结构组成,其目的是为了解决由许多人共同开发大型软件时,如何高效率地完成高可靠系统的问题。结构化的程序设计方法结构化程序设计方法的基本思路是,把一个复9结构化的程序设计方法在接受一个任务后应怎样着手进行呢?有两种不同的方法:

1.一种是自顶向下,逐步细化。2.一种是自下而上,逐步积累。

以写文章为

例来说明这个问题:有的人胸有全局,先想好整个文章分成哪几个部分,然后再进一步考虑每一部分分成哪几节,每一节分成哪

几段,每一段应包含什么内容,用这种方法逐步分解,直到作者认为可以直接将各小段表达为文字语句为止。这种方法就叫做

“自顶向下,逐步细化”。

另有些人写文章时不拟提纲,如同写信一样提起笔就写,想到哪里就写到哪里,直到他认为把想写的内容都写出来了为止。

这种方法叫做“自下而上,逐步积累”。显然,用第一种方法考虑周全,结构清晰,层次分明,作者容易写,读者容易看。如果发现某一部分中有一段内容不妥,需要修改

只需找出该部分,修改有关段落即可,与其他部分无关。我们提倡用这种方法设计程序。这就是用工程的方法设计程序。我们应当掌握自顶向下、逐步细化的设计方法。这种设计方法的过程是将问题求解由抽象逐步具体化的过程。结构化的程序设计方法在接受一个任务后应怎样着手进行呢?有两种10结构化的程序设计方法结构化的程序设计把数据和对数据的处理过程分离为相互独立的实体,即程序结构是“数据结构+算法”。若要修改某个数据结构,就需要改动涉及此数据结构的所有处理模块,所以,当应用程序比较复杂时,人员出错,难以维护。其次,结构化的程序设计方法仍存在与人的思维不协调的地方,所以很难自然、准确地反映真实世界。因此,用此方法开发出来的软件,有时很难保证其质量,甚至需要重新开发结构化的程序设计方法结构化的程序设计把数据和对数据的处理过程11程序设计方法3.面向对象的程序设计方法(ObjectOrientedProgramming,OOP)虽然结构化程序设计提高了软件生产率和软件质量,但随着程序规模与复杂性的增长,程序中的数据结构变得与这些数据上的操作同样重要。在大型结构化程序中,一个数据结构可能由许多个过程来处理,修改数据结构将影响到所有相关的过程。在由几百个过程组成的成千上万行的结构化程序中,这种情况变得相当麻烦并且容易产生错误。60年代末开始,国际上出现了“软件危机”,主要表现是:软件质量差、成本及开发进度难以控制,维护工作麻烦,产生这一危机的根本原因在于结构化方法强烈依赖系统逻辑模型的完整性描述,难以做到系统的动态变化与扩展,系统开发速度慢、周期长、费用高;结构化设计方法讲究的是自顶而下的“瀑布式”设计,使数据结构的设计仅服从于当前功能实现的要求,为以后的扩充和重用设置了巨大的障碍。程序设计方法3.面向对象的程序设计方法(ObjectOri12面向对象的程序设计方法20世纪80年代兴起的面向对象程序设计方法在结构化程序设计的基础上提出了一种新的设计思路,最重要的改变是程序围绕被操作的数据来设计,而不是围绕操作本身。面向对象程序设计以类作为构造程序的基本单位,具有封装、数据抽象、继承、多态化等特点。较有影响的采用面向对象程序设计方法的语言有C++、Java等。面向对象的程序设计语言大致可以分为两类,一类是纯面向对象语言,例如Java语言;另一类是混合型面向对象语言,它们往往是由结构化语言发展而来的,例如C++语言和VisualBasic语言。面向对象的程序设计方法20世纪80年代兴起的面向对象程序设计13面向对象的程序设计方法面向对象程序设计思想是将数据以及对数据的操作封装在一个独立的数据结构(对象)中,这种模式更接近现实世界,所有的对象都拥有属性和行为,对象之间的联系通过消息来实现。面向对象,实际上就是以对象为中心来分析和解决问题。它不再将问题分解为过程,而是将问题分解为对象。例如,设计VB应用程序时,一个窗体就是一个对象,各种控件也是对象,程序员可以直接使用这些对象,程序的设计过程就是设计对象和运用对象的过程。面向对象的程序设计中程序是“对象+消息”。面向对象程序设计方法力求符合人们自然的思维习惯,运用类和对象的观点描述问题域,然后用程序设计语言对问题进行描述和实现。面向对象的程序设计方法面向对象程序设计思想是将数据以及对数据14面向对象的程序设计方法面向对象程序设计是一种新兴的程序设计方法,或者是一种新的程序设计规范,它使用对象、类、继承、封装、消息等基本概念来进行程序的设计。面向对象的程序设计是以要解决的问题中所涉及的各种对象为主体,力求程序设计符合人们日常的思维习惯,降低问题的难度和复杂性,提高编程的效率。使用面向对象的程序设计方法来解决问题就是从实际问题中抽象并封装数据和操作的对象,通过定义其状态和操作其行为来表述对象的特征和功能。此外,还可以通过定义接口来描述对象的地位以及与其他对象的关系,最终形成一个广泛联系的可理解、可扩充、可维护及更接近于问题本来面目的动态对象模型系统。面向对象的程序设计思想是将数据以及对于这些数据的操作,封装在了一个单独的数据结构中。这种模式更近似于现实世界,在这里,所有的对象都同时拥有属性以及与这些属性相关的行为。对象之间的联系是通过消息来实现的,消息是请求对象执行某一处理或回答某些信息的要求。某个对象在执行相应的处理时,可以通过传递消息请求其他对象完成某些处理工作或回答某些消息。其他对象在执行所要求的处理活动时,同样可以通过传递消息和另外的对象联系。所以,一个面向对象程序的执行,就是靠对象间传递消息来完成的。面向对象的程序设计方法面向对象程序设计是一种新兴的程序设计方15OOP的逻辑过程面向对象设计分析的完整过程如图所示:现实域抽象抽象类对象实例化映射抽象数据类物理实体逻辑实现概念域计算机世界OOP的逻辑过程面向对象设计分析的完整过程如图所示:现实域16已知摄氏温度C,则华氏温度F=(C*9/5)+32。height=1.对象的创建和使用公有的(public):该类的成员可以被其他任何所有的类访问静态成员与实例成员publicclasstheThisprivateStringcellPhoneCode;//手机号码getInfo());求属性x和y的商,并返回结果的方法;这种设计方法的过程是将问题求解由抽象逐步具体化的过程。System.publicstaticvoidmain(String[]args)name和与age是User类的私有成员变量,外部类不能访问。//把构造方法参数x赋给类中的成员变量xpublicEmpInfo(){}//缺省的构造方法designation="Manager";//给成员变量赋值friendly修饰符又称为缺省访问控制符。就可以直接修改User类中的成员变量。classChinese{面向对象的重要特征

面向对象具有以下几个重要特征:抽象封装继承多态性

33313234已知摄氏温度C,则华氏温度F=(C*9/5)+32。面向对象17抽象抽象(Abstraction):抽象是面向对象编程的起点,也是其最本质的特征之一。抽象的广义概念是这样定义的:从研究对象中提取与当前目标主题关系最密切的主要方面,而忽略掉与目标无关的那些方面或关系不大的细枝末节,从而更充分地注意与当前目标有关的方面,更明确地突出主题,这就是抽象。抽象抽象(Abstraction):抽象是面向对象编程的起点18抽象示例下图阐述了如何由自然界众多的动物实体出发,经过抽象的处理过程,最终得到动物这一概念

抽象示例下图阐述了如何由自然界众多的动物实体出发,经过抽象的19封装封装(Encapsulation):封装也可称为信息隐藏(InformationHiding),是通过对象的方法来访问与改变对象属性的一种机制。封装是面向对象的一个重要原则,其实现的核心是将类的属性与相关的操作捆绑起来,包装成不可分割的、独立的对象实体,将内部的数据与实现细节尽可能隐蔽起来,使外部用户不能直接操纵对象的内部信息,只能通过对象对外提供的施加有一定限制的访问接口来使用对象封装封装(Encapsulation):封装也可称为信息隐20封装示例下图形象地说明了一个类的封装原理。类对数据与行为的封装是借助于不同级别的访问修饰符来达到控制目的的

封装示例下图形象地说明了一个类的封装原理。类对数据与行为的封21继承继承(Inheritance):继承是指从已有的类中可以派生出若干个新类,已有类称为基类或父类,新类称为派生类或子类;子类将自动地获得基类的属性与方法,从而不需再重复定义这些属性与方法;当然子类还可以修改父类的方法或增加新的方法,从而使自己更适合特殊的需要。类之间的继承关系是现实世界中遗传关系的直接模拟继承继承(Inheritance):继承是指从已有的类中可以22多态性多态性(Polymorphism):是指允许不同类的对象对同一消息作出各自的响应,即以统一的风格处理已存在的数据及相关的操作。多态性语言具有灵活、抽象、行为共享、代码共享的优势,较好地解决了应用程序中方法同名的问题多态性多态性(Polymorphism):是指允许不同类的对23

OOP的优越性

从面向过程到面向对象是程序设计技术的一个飞跃。人们之所以要采用面向对象的程序设计技术,其目的在于:

1.按照与人类习惯思维方法一致的原则开发系统2.提高代码的可重用性(或者称为复用性)3.提升程序的开发与运行效率

4.提高程序的可靠性与可维护性5.提高程序的可扩展性6.增强程序的可控制性总之,面向对象的程序设计,能够有效分解、降低问题的难度与复杂性,提高整个求解过程的可控制性、可监视性和可维护性,从而获得较高的开发效率与可靠效果OOP的优越性从面向过程到面向对象是程序设计技术的24结构化与面向对象程序设计之比较结构化与面向对象程序设计之比较25结构化与面向对象程序设计之比较面向对象程序设计方法与人类习惯的思维方式一致,比如希望完成“猪八戒吃西瓜”这样一件事情:在结构化的程序里,一切都是函数,函数最大,因此这件事情会用如下语句来表达:吃(猪八戒,西瓜);在面向对象程序里,一切以对象为中心,对象最大,因此这件事情会用如下语句来表达:猪八戒.吃(西瓜);对比两条语句不难发现,面向对象的语句更接近自然语言的语法,主语、谓语、宾语一目了然,十分直观,程序员更容易理解。结构化与面向对象程序设计之比较面向对象程序设计方法与人类习惯26publicstaticvoidmain(String[]args){信息隐蔽,即尽可能隐蔽类的内部细节,对外形成一个边界(或者说形成一道屏障),只保留有限的对外接口使之与外部发生联系因为静态方法属于类本身,所以只要声明了类,它的静态方法就存在,就可以直接使用类来调用。(2)当调用方法时,系统按照实参与形参一一对应的关系将实参的值或引用传递给对应的形参。publicStudent(Stringname){//一个参数的构造方法Stringname;//成员变量同样地,任何一个类的对象去修改它,也都是在对同一个内存单元进行操作。EmpInfoemployee=newEmpInfo();//创建对象并实例化系统运行时为每一个静态成员变量只分配一个存储单元,使得所有通过该类实例化的对象共享同一个静态成员变量的存储空间。实例成员则属于类的实例(即对象),包括实例成员变量和实例成员方法。类实际上是一种复杂的数据类型,它是将数据和对数据的操作封装在一起的集合体。Class14.println(str);public变量名;定义一个由“人”类实例化而来的具体的“人”对象,该对象也就具有了“人”类的属性和行为,比如姓名为张三。friendly:此方法可以由本类中的方法和本包中其他类中的方法访问,为默认修饰符。Class27ob2=newClass27(20);三角形、圆形和梯形的类封装:让学生学习使用类来封装对象的属性和行为。classStudent{publicstaticvoidmain(String[]args){

面向对象程序设计方法

类的定义构造方法对象的创建和使用this关键字类的封装性静态成员与实例成员方法调用与参数传递匿名对象内容提要

publicstaticvoidmain(String27类与对象现实世界现实世界中的类:在现实世界中把众多的事物归纳、划分成一些类是人类在认识客观世界时经常采用的思维方法。类是具有相同属性和行为的一组对象的集合,其内部包括属性和行为两个主要部分。例如,如果把“人”看成是一个抽象的类,那么人的姓名、性别、年龄等数据就是“人”类的属性,而说话、跑步等称为“人”类的行为(或者叫方法)。现实世界中的对象:对象是类的一个实例。例如每一个具体的人就是“人”类中的一个实例,即一个对象。定义一个由“人”类实例化而来的具体的“人”对象,该对象也就具有了“人”类的属性和行为,比如姓名为张三。但是不同的“人”对象的属性和行为是不尽相同的,例如两个人的姓名就是互不相同的。总之,对象是类具体化的实例,类是同一种类型对象的抽象。类与对象现实世界28类与对象的关系可以用计算机模型与计算机实体之间的关系来更形象地说明类与对象之间的关系:将冯·诺依曼计算机模型看作计算机类,则不同品牌的计算机实体就对应为一个个的实例对象。类与对象的关系可以用计算机模型与计算机实体之间的关系来更形象29类与对象的关系示例计算机模型与计算机实体之间的关系:类与对象的关系示例计算机模型与计算机实体之间的关系:30类与对象Java中的类与对象Java中的类:在Java语言中,将数据与对数据进行的操作合起来定义为类。类实际上是一种复杂的数据类型,它是将数据和对数据的操作封装在一起的集合体。类是普通数据类型的扩展,类不但含有数据,还包含了对数据进行操作的方法。类中的数据称为类的成员变量,类中的对数据进行的操作称为类的成员方法。二者统称为类的成员。Java中的对象:在面向对象的方法学中,“对象”是现实世界的实体或概念在计算机逻辑中的抽象表示。一个对象被称为其类的一个实例,是该类的一次实例化的结果。在Java语言中,在Java语言中总是先有类,然后才能创建对象。脱离类的对象是无法创建的,而脱离了对象的类也是毫无意义的。类与对象是抽象与具体的关系。对象是由类创建的。对象的最主要特点是以数据为中心,它是一个集成了数据和其上操作的封装。封装隐藏了类的内部实现细节,强制类的使用者通过规定的接口访问对象,提高了代码的可维护性。对象是具有唯一对象名和固定对外接口的一组属性和操作的集合,用来模拟组成或影响现实世界问题的一个或一组因素。类与对象之间的关系,类似于数据类型与变量之间的关系;一个类可以生成无数个不同的对象,每个对象属性值不同,其状态也不同。类与对象Java中的类与对象31Java中类的定义类是组成java程序的基本要素,也是java程序设计的重要思想表现。作为程序的基本要素,类可以看作定义对象的模板。当编写Java程序时,既可以使用Java系统类库提供的类,也可以使用Java开发人员自己编写的类。Java类的定义格式如下:[<修饰符>]class<类名>[extends<父类名>][implements<接口名>]//类头{<类体>}说明:(1)类头定义该类的名称、访问权限、与其他类的关系以及实现的接口等。(2)类体定义该类中的成员,包含成员变量和成员方法。成员方法是用来描述对成员变量进行的操作,不但定义方法,一般还要实现该方法。Java中类的定义类是组成java程序的基本要素,也是ja32java类的定义类头说明:(1)class是定义类的关键字,<类名>、<父类名>、<接口名>都应该是合法的Java标识符。习惯上类名的第一个字母大写,但这不是必须的。类名最好见名知意,当类名由几个”单词”复合而成时,每个单词的首写字母使用大写,如BeijingTime、AmericanMap、ChongQing,CarNumber等。(2)在类的声明中必须包括关键字class和自定义的类名,而方括号[]中的是可选项。(3)子句extends<父类名>显式地指明当前类的父类,子句implements<接口名>则说明当前类要实现接口。

java类的定义类头说明:33java类的定义修饰符关键字含义限制访问权限修饰符public声明类是公有的,可以被任何类使用或继承。一个源程序中最多只能存在一个公有类。只能是主类终结类说明符final声明该类不能被继承。abstract与final为互斥的两个修饰符,不能同时出现于一个类的声明中

抽象类说明符abstract声明该类不能被实例化,但可以被继承。

无修饰符

可以被同一个程序包中的其他类访问和继承

(4)修饰符:java类的定义修饰符关键字含义限制访问权限修饰符publi34java类的定义类是创建对象的模板,因此它应该能够描述一类事物共有的属性和功能,这个描述过程由类体实现。类声明之后的一对大括号“{”、“}”以及它们之间的内容称做类体。类体的定义格式如下:{ <成员变量的声明> <构造方法的声明与实现> <成员方法的声明及实现>}说明:(1)类体的数据声明为成员变量,针对数据的操作声明为成员方法,数据的操作过程在成员方法的实现中体现。(2)构造方法主要用于类对象的实例化,又称构造器。(3)类体中声明的成员变量和方法的排列顺序可以任意。java类的定义类是创建对象的模板,因此它应该能够描述一类事35成员变量类的成员变量(MemberVariable)是在类的内部、方法定义的外部所定义的变量,成员变量又称为属性(Attribute)或数据域(DataField),用来描述类的数据特征。声明类的成员变量格式如下:[访问权限修饰符][static][final]数据类型成员变量名1[,成员变量名2,…]说明:(1)访问权限修饰符的作用是限定成员变量的可访问权限,主要有:public:公共的,此变量可以在任何地方访问。protected:受保护的,此变量可以在本包及其子类中访问。private:私有的,此变量只可以在本类中访问。friendly:此变量只可以在本包中访问,这是默认的修饰符。(2)static用于声明类成员变量,用于保存与整个类有关的状态数据的成员变量称为静态成员变量或者类成员变量,简称为类变量,final用于声明常量。(3)成员变量的数据类型既可以是基本数据类型,也可以是引用数据类型,如数组或者其他类对象等。成员变量类的成员变量(MemberVariable)是在36对象的创建和使用name+",年龄是:"+user2.(2)初始化对象中的实例变量的值,初始值可以是缺省值,或者变量按指定的值初始化;较有影响的采用面向对象程序设计方法的语言有C++、Java等。privateStringcellPhoneCode;//手机号码各种访问权限的访问级别a=b;//静态变量aJava中的开平方:Math.//引用成员变量面向对象的程序设计方法类是组成java程序的基本要素,也是java程序设计的重要思想表现。第一种做法,按照最原始的方式:也就是说,不论一个类具有多少个对象,静态变量只有一个,任何一个类的对象访问它,取得的都是相同的数值。publicstaticvoidmain(String[]args){publicvoidsetX(intx){setX(-100);publicclassRectangle{publicstaticvoidmain(String[]args)classUser{静态成员方法在不创建对象的时候也可以被调用。成员变量对象的创建和使用成员变量37成员变量定义示例classPeople{ //类头 intage;//成员变量 Stringname;//成员变量 doubleheight;//成员变量}在该类中定义了三个成员变量,分别是intage、Stringname和doubleheight。三个成员变量的修饰符都是默认的friendly。成员变量定义示例classPeople{ //类头38成员变量定义示例【例】定义一个学生类Student其属性包含学号、姓名、性别、出生日期、电子邮箱、手机号码、QQ号码、通讯地址等。类的定义代码如下:classStudent{publicStringcode;//学号publicStringname;//姓名publicbooleansex;//性别privateDatebirthDate;//出生日期privateStringEmail;//电子邮箱privateStringcellPhoneCode;//手机号码privateintQQCode;//QQ号码publicStringaddress;//通讯地址……//成员方法定义(略)}成员变量定义示例【例】定义一个学生类Student其属性包含39成员变量初始化1.如果定义成员变量时没有指定初值,则系统自动指定初值。成员变量初始化1.如果定义成员变量时没有指定初值,则系统自动40成员变量初始化2.在定义成员变量时也可以指定初值。例如:

publicclassPoint{

privateintx=10;

……}注意:publicclassPoint{

privateintx;//错误,因为x=10;是赋值语句,对成员变量的操作必须放在方法中,不能直接放在类中x=10;

……}3.更为常用初始化方法是通过构造方法。例如:publicPoint(intx1,inty1){

x=x1;

y=y1;

}成员变量初始化2.在定义成员变量时也可以指定初值。例如:41成员方法成员方法(MemberMethod)又称为功能接口(FunctionInterface),简称为方法(Method),是类与外界的接口,描述了类的行为方式,反应了对象的行为特征,特别是对属性进行操作的特征。成员方法对成员变量的操作主要体现在以下两个方面:改变对象的属性,一般记为set方法返回对象的属性,一般记为get方法成员方法成员方法(MemberMethod)又称为功能接口42成员方法类的行为即对数据的操作由它的成员方法实现。成员方法是可被调用执行并返回值的、能实现特定功能的程序段。成员方法声明格式如下:[访问权限修饰符][abstract][static][final]返回值类型方法名([形式参数列表])[throws异常类]{方法体 }说明:(1)成员方法的访问权限修饰符和成员变量的修饰符一样有四种情况:public:此方法可以在任何地方访问。private:此方法只可以由本类中的方法访问。friendly:此方法可以由本类中的方法和本包中其他类中的方法访问,为默认修饰符。protected:此方法可以由本类及其子类中的方法访问。成员方法类的行为即对数据的操作由它的成员方法实现。成员方法是43成员方法(2)abstract、static和final分别用于指定所声明的方法为抽象方法、静态方法和终结方法。静态方法又称类成员方法或类方法,一般用于与类有关的数据操作,可以使用类名直接调用。(3)成员方法执行数据操作功能后都会向调用者返回数据操作的结果,返回值类型就是用于声明该成员方法返回值结果的数据类型,可以是包括基本数据类型和引用类型在内任何合法的类型。(4)若成员方法不返回任何值,则返回值类型用void标记,不能缺省。(5)每个成员方法都有一个方法名,紧邻方法名的是用一对括号()括起来的参数列表,参数列表也称为形式参数表,简称形参表。成员方法(2)abstract、static和final分别44成员方法(6)形参表主要用于声明该成员方法在被调用时需要调用者提供的、与数据操作相关的参数的个数与数据类型。每个成员方法允许声明的形参可以有零到多个,每个形参由形参数据类型、空格符和形参名组成,多个形参之间用逗号分隔,即便成员方法没有形参,括号()也不能缺省。(7)形参的作用域是局部的,只限于声明它的成员方法之内有效。(8)throws用于声明该成员方法在执行过程中可能会抛出的异常类型。成员方法(6)形参表主要用于声明该成员方法在被调用时需要调用45成员方法(9)花括号{}所括起来的就是方法体,方法体可以包含一到多条语句,用以实现成员方法所负责的数据操作功能。若成员方法的返回值类型不为void,则在方法体中需要使用return语句返回其数据操作的结果,且结果类型必须与方法声明的返回值类型相一致。方法体也可以是一个分号“;”(没有{}),表示无方法体,该方法没有实现。当且仅当方法的修饰符中有abstract或native时,方法才无方法体。(10)在方法体内可以定义局部变量,其作用域只限于声明它的方法体内,且声明中不能使用public等访问修饰符和static关键字,同时需遵循“先赋值,后使用”的原则,且在同一个类的不同方法中可以声明同名的局部变量,包括形式参数在内的所有局部变量都不能在方法体外被访问。成员方法(9)花括号{}所括起来的就是方法体,方法体可以包含46hello();voideat(){//成员方法,空类型,无参数,方法名为eat计算机不能直接执行高级语言程序,必须先翻译成为机器语言程序之后才能执行。对象运行结束后或生命周期结束时,将成为垃圾对象,但并不意味着就立即会被回收,仅当垃圾回收器空闲或内存不足时,才会回收它们。name=name;静态成员变量可以通过类名直接访问,也可以由对象变量来引用。print();//调用本类中的print方法Class15.其次,结构化的程序设计方法仍存在与人的思维不协调的地方,所以很难自然、准确地反映真实世界。静态成员与实例成员public

class

Example

{

void

idea()

{

System.System.Circle类具有类型为double的半径、周长和面积属性,并具有返回周长和面积的方法。通过this可以引用当前对象的成员变量或者调用当前对象的成员方法。Rectangleob=newRectangle();System.结构化的程序设计把程序的结构规定为顺序、选择和循环三种结构,限制使用GOTO语句,并采用了自顶向下、逐步求精的分析和设计方法,即功能分解法,这种方法将需求空间视为一个功能模块,该模块又进行分解,生成多个小的功能模块,重复分解,直至每个模块具有明确的功能和适当的复杂度,而每个模块的功能实现都由上述三种基本结构组成,其目的是为了解决由许多人共同开发大型软件时,如何高效率地完成高可靠系统的问题。[访问权限修饰符][abstract][static][final]返回值类型方法名([形式参数列表])[throws异常类]机器语言:是计算机能够直接执行的二进制指令代码,每条指令都用0和1组成的序列串表示,这些指令的集合就是指令系统。面向对象的程序设计中程序是“对象+消息”。成员方法例如下面的代码声明了一个名为People的类,其中定义了两个成员方法。classPeople{ intage;//成员变量 Stringname;//成员变量 doubleheight;//成员变量 voidlaugh(){//成员方法,空类型,无参数,方法名为laugh System.out.println("哈哈");//方法体}voideat(){//成员方法,空类型,无参数,方法名为eatSystem.out.println("人要吃饭");//方法体}}//类体结束hello();成员方法例如下面的代码声明了一个名为Peop47成员方法如果方法有返回值类型,则方法体中必须有return语句.如果想让方法执行后得到值a,即返回值为a,那么在方法中要使用returna语句。return有“返还”之意,它把表达式的值返回到调用之处。例如:publicclassClass3{doublef(intx){ return2.5+x;}publicstaticvoidmain(String[]args){Class3aaa=newClass3();doubley=aaa.f(3);System.out.println(y);System.out.println(aaa.f(2)); }}成员方法如果方法有返回值类型,则方法体中必须有return语48return语句return语句用在方法中,每一个方法可以有一个返回值,也可以没有,没有即返回returnvoid。当程序执行到该语句时,终止当前方法的执行,返回到调用该方法语句的后面一条语句。return语句可以从一个方法返回,并把控制权交给调用它的语句,return语句通常被放在方法的最后,用于退出当前方法并返回一个值。它的语法格式为:return[表达式];表达式是可选参数,表示要返回的值。它的数据类型必须同方法声明中的返回值类型一致。如果不一致时,表达式的类型强制转换为方法返回值的类型。return语句return语句用在方法中,每一个方法可49return语句例如:编写返回a和b两数相加之和的方法可以使用如下代码:publicintset(inta,intb){returnsum=a+b;}计算表达式的值,然后将该值返回到调用该方法的语句中return语句例如:编写返回a和b两数相加之和的方法可以50return语句如果方法没有返回值,可以省略return关键字的表达式,使方法结束。代码如下:publicvoidset(inta,intb){sum=a+b;return;//也可以省略return语句,因为方法的结束标记大花括号也具有该语句的功能,}这种格式一般用于if语句或者switch语句等选择结构。return语句如果方法没有返回值,可以省略return关键51return语句return语句52类课堂练习定义满足下列条件的Pen类:Pen类拥有的属性有:笔尖的粗细、墨水量、墨水颜色、有无笔帽、长度及半径。Pen类拥有的方法:画图、写字、更换墨水类课堂练习定义满足下列条件的Pen类:53

面向对象程序设计方法

类的定义构造方法对象的创建和使用this关键字类的封装性静态成员与实例成员方法调用与参数传递匿名对象内容提要

面向对象程序设计方法内容提要54构造方法构造方法是类用来创建对象、初始化类的属性的一种特殊方法,它本身不属于类的成员方法。每当由类创建对象时都要调用该类特定的构造方法,在Java中,每个类都至少有一个构造方法。构造方法可以确保用户正确地构造类的对象,同时,构造方法也会对对象作初始化工作。构造方法的声明格式如下: [<修饰符>]<类名称>([<参数列表>]) { 初始化的程序代码块 }可以使用参数值作为变量的初值,也可以直接给变量赋具体的数值。构造方法构造方法是类用来创建对象、初始化类的属性的一种特殊方55构造方法说明:(1)一个类的构造方法可以有多个,它们都具有相同的方法名,即类名;(2)与类的成员方法不同,构造方法用于创建类的对象并对对象的成员变量进行初始化。(3)构造方法没有返回值类型,但是也不能有void关键字,且只能通过new运算符调用。(4)修饰符一般采用public(或者没有),以便于在其他位置根据需要定义并实例化该类的对象。修饰符也可以使用private,private类型的构造方法表明该类类不能被其他类实例化,通常用于只含有静态成员的类。(5)当一个类没有显式声明其构造方法时,Java编译器会自动为该类生成一个默认的、无参数的构造方法,且实例化后对象的成员变量在没有特别赋值的情况下自动获得其所声明类型的默认值。构造方法说明:56这种模式更近似于现实世界,在这里,所有的对象都同时拥有属性以及与这些属性相关的行为。所以,我们在实际编程的时候有时候需要在一个构造方法中调用另外一个构造方法,但是,在使用this关键字调用其他构造方法时,this()只能放在构造方法的首行,为的是能够为类中的属性初始化,而且至少有一个构造方法是不用this调用的,否则程序会出错。类的访问权限有public和缺省两种。程序设计语言的设计目的主要是为了支持某种程序设计方法。对象的创建和使用显然,用第一种方法考虑周全,结构清晰,层次分明,作者容易写,读者容易看。创建一个对象后,在程序中就可以引用对象中的成员变量,调用对象的成员方法(即使用对象),语法格式如下:如果不一致时,表达式的类型强制转换为方法返回值的类型。publicStudent(Stringname){//一个参数的构造方法结构化的程序设计方法:如果发现某一部分中有一段内容不妥,需要修改

只需找出该部分,修改有关段落即可,与其他部分无关。classPeople{ //类头同一个类的不同对象可以互相访问对方的private实例变量或者调用对方的private实例方法,这是因为访问控制符是在类级别上,而不是对象级别上。声明类是公有的,可以被任何类使用或继承。【例】定义一个学生类Student其属性包含学号、姓名、性别、出生日期、电子邮箱、手机号码、QQ号码、通讯地址等。第一种做法,按照最原始的方式:classStudent{提升程序的开发与运行效率如果使用实例成员变量,那么每个中国人的实例对象都会分配一个country属性,有多少个中国人的实例对象,就会创建多少份country属性的内存空间。例如:张三=newPeople()构造方法的分类1.不带参数的构造方法,又分为:缺省的构造方法显式的不带参数的构造方法2.带参数的构造方法

这种模式更近似于现实世界,在这里,所有的对象都同时拥有属性以57构造方法(1)缺省的构造方法

如果类的定义没有编写构造方法,Java语言会自动为用户提供。这个由Java自动提供的构造方法就是所谓的缺省构造方法。缺省的构造方法确保每个Java类都至少有一个构造方法,该方法应符合方法的定义。

但如果自定义了构造方法,则系统不再提供无参构造方法。如果需要无参的构造方法,则需要显式定义。例如在下例的类EmpInfo中,我们没有定义构造方法,则Java自动提供了一个缺省的构造方法,如下:publicEmpInfo(){}//缺省的构造方法构造方法(1)缺省的构造方法58缺省的构造方法EmpInfo.javapublicclassEmpInfo{Stringname;//雇员的姓名Stringdesignation;//雇员的职务Stringdepartment;//雇员的部门voidprint(){//成员方法System.out.println(name+"is"+designation+"at"+department);}publicstaticvoidmain(Stringargv[]){EmpInfoemployee=newEmpInfo();//创建对象并实例化="RobertJavaman";//给成员变量赋值employee.designation="Manager";//给成员变量赋值employee.department="CoffeeShop";//给成员变量赋值employee.print();//调用方法print()}}运行结果如下:RobertJavamanisManageratCoffeeShop调用缺省的构造方法缺省的构造方法EmpInfo.java调用缺省的构造方法59构造方法(2)显式的不带参数的构造方法。例如,可以为People类增加一个如下所示的构造方法ClassPeople{stringname;intage;floatheight;floatweight;publicPeople()//无参数{name="沈昕";age=26;height=1.62;weight=55.5;}}构造方法(2)显式的不带参数的构造方法。例如,可以为Peop60构造方法(3)带参数的构造方法带有参数的构造方法能够实现这样的功能:当构造一个新对象时,类构造方法可以按需要将一些指定的参数传递给对象的变量。例如,如果希望在创建对象时,其实例变量具有不同的初值,可以通过传递参数并将参数值赋给实例变量的方法来实现。构造方法的参数要与实例变量一一对应,例如:People类的另一种构造方法为:带参数的构造方法构造方法(3)带参数的构造方法61带参数的构造方法ClassPeople{Stringname;intage;floatheight;floatweight;publicPeople(StringinitName,intinitAge,doubleinitHeight,doubleinitWeight){name=initName;age=initAge;height=initHeight;weight=initWeight;}}带参数的构造方法ClassPeople{62一个类可以有多个构造方法(构造方法的重载)ClassPeople{Stringname;intage;floatheight;floatweight;publicPeople()//无参数{name="沈昕";age=26;height=1.62;weight=55.5;}publicPeople(StringinitName,intinitAge,doubleinitHeight,doubleinitWeight){name=initName;age=initAge;height=initHeight;weight=initWeight;}}一个类可以有多个构造方法(构造方法的重载)ClassPeo63构造方法构造方法不能像一般的成员方法那样被直接调用,它是在构造类的对象的时候被new关键字调用的。当我们构造一个类的对象的时候,编译器主要完成以下三件事情:(1)为对象分配内存空间;(2)初始化对象中的实例变量的值,初始值可以是缺省值,或者变量按指定的值初始化;(3)调用对象的构造方法。一个类的构造方法可以有多个,它们都具有相同的方法名,即类名。编译器根据参数的类型来决定调用哪个构造方法。这就是构造方法的多态。构造方法构造方法不能像一般的成员方法那样被直接调用,它是在构64

面向对象程序设计方法

类的定义构造方法对象的创建和使用this关键字类的封装性静态成员与实例成员方法调用与参数传递匿名对象内容提要

面向对象程序设计方法内容提要65Java中的对象

对象是类的实例,所以一个对象必定属于一个已知的类。Java语言中,一个对象的生命周期经历:对象的创建、对象的使用、对象的销毁三个阶段。对象被创建后将获得包括内存在内的所需资源;而对象销毁后,其所占的资源将被系统自动回收。Java语言具有资源回收机制,能跟踪存储单元的使用情况,自动回收不再被使用的资源。Java中的对象对象是类的实例,所以一个对象必定属于一个已66对象的创建

对象的创建:创建一个对象包括两个步骤:声明对象和为对象分配内存。1)对象的声明一般格式为:类名对象名如:People张三这里people是前面定义的一个类的名字,张三是声明对象的名字。但此时对象“张三”的内存中没有任何数据,即“张三”还是一个空对象,不能使用。要是用这个对象还必须为这个对象分配内存,也叫做为对象分配实体。

对象的创建对象的创建:创建一个对象包括两个步骤:声明对象67对象的创建2)为对象分配内存:为对象分配内存,即使用new运算符和类的构造方法实例化某个对象。如果类中没有构造方法,系统会自动调用默认的构造方法(没有参数,名字遵循普通构造方法的要求:和类名相同),格式为:

对象名=new构造方法名([实参列表]);//实例化对象

例如:张三=newPeople()也可以把以上两个步骤合在一起,格式为:类名对象名=new构造方法名([实参列表]);

例如:People张三=newPeople()另外,因为对象也是一种变量,因此它可作为数组元素、类的成员、也可以出现在成员方法的参数表和方法体中。new可以实例化类的多个不同的对象,分配不同的内存。因此,这些对象之间的状态相互独立。对象的创建2)为对象分配内存:为对象分配内存,即使用new68对象的使用

创建一个对象后,在程序中就可以引用对象中的成员变量,调用对象的成员方法(即使用对象),语法格式如下: 对象名.成员变量 对象名.成员方法([实参列表])例如:aday.year=2009; aday.setDate(2009,10,28);说明:(1)对象名与成员变量或方法之间使用点运算符“.”分隔。(2)方法调用时给出的参数称为实际参数,简称实参。实参可以是常量、变量、表达式或方法的调用,实参的个数与数据类型及排列次序一定要与类定义中该方法声明的形参保持一致,且多个实参之间用逗号分隔。对象的使用创建一个对象后,在程序中就可以引用对象中的成员变69对象的使用

(2)当调用方法时,系统按照实参与形参一一对应的关系将实参的值或引用传递给对应的形参。需要特别注意的是,若实参为引用类型的数据,其值不能为null。方法后的圆括号()是必需的,即便该方法没有声明形式参数也不能缺省。

对象的使用(2)当调用方法时,系统按照实参与形参一一对应的70对象创建和使用:例1classPeople{ intage; Stringname; doubleheight; People(){//构造方法 name="张婷"; age=25; height=160.0; } voidlaugh(){//类的一个成员方法 System.out.println("Haaha..."); } publicstaticvoidmain(String[]args){ System.out.println("main方法执行"); Peoplep=newPeople(); p.laugh();System.out.println("="+);System.out.println("p.age="+p.age);System.out.println("p.height="+p.height); }}对象创建和使用:例1classPeople{71对象创建和使用:例2publicclassClass27{inta;publicClass27(){ a=10;}publicClass27(intq){ a=q;}publicstaticvoidmain(String[]args){Class27ob1=newClass27();Class27ob2=newClass27(20);Class27ob3=newClass27(30);

System.out.println(ob1.a);System.out.println(ob2.a);System.out.println(ob3.a);

}}两个构造方法对象创建和使用:例2publicclassClass2772对象创建和使用:例3classMan{intheight;intage;}publicclassClass1{publicstaticvoidmain(String[]args){Manman1;man1=newMan();man1.height=180;man1.age=20;System.out.println(man1.height);//使用对象的成员变量System.out.println(man1.age); }}在本源程序中,有两个类,其中包含主方法的类为主类,文件名与主类名相同对象创建和使用:例3classMan{在本源程序中,有两个73对象的销毁java不需要显式地销毁对象,java有一个垃圾回收器(garbagecollector,简称GC),在程序运行时,垃圾回收器会自动创建一个线程运行并监控需要清理的对象并自动清理.这也是java比C++安全性和简便性更好的原因之一。Java中垃圾回收器自动地定期扫描Java对象的动态内存,并将所有的引用对象加上标记,在对象运行结束后(无引用变量对该对象进行关联),清除其标记,并将所有无标记的对象作为垃圾进行回收,释放垃圾对象所占的内存空间。对象运行结束后或生命周期结束时,将成为垃圾对象,但并不意味着就立即会被回收,仅当垃圾回收器空闲或内存不足时,才会回收它们。对象的销毁java不需要显式地销毁对象,java有一个垃圾回74对象的销毁垃圾回收器也有自己的缺点,就是它不会实时的调用自己来回收已经过期的对象,因为它是一个优先级很低的进程来控制的,所以只有当系统内存比较紧张的情况下才会做销毁对象,释放内存的工作,而且它也有个局限性,就是只会释放new出来的对象,对于静态的对象变量或者其他方式创建的对象它是不做处理的,所以Object里有个finalize方法提供给子类来实现,就是为了能在GC销毁对象对做一些清理型的工作,比如关闭流之类的,我们可以在里面写上对象销毁后需要关联的操作。对象的销毁垃圾回收器也有自己的缺点,就是它不会实时的调用自己75对象的创建和使用作业1.有一个类Class1拥有以下成员变量:inta;doubleb;Stringc;请编写构造方法(带参数)初始化成员变量,创建类Class1的对象ob,输出对象ob的三个成员变量值。2.定义一个满足下面要求的矩形类Rectangle,Rectangle类具有长度(length)和宽度(width)属性,并提供计算矩形面积的方法area()。类中需要构造方法(带参数)对成员变量进行初始化,最后定义主类TestRectangle,创建Rectangle类的对象,调用对象的area()方法输出矩形面积。对象的创建和使用作业1.有一个类Class1拥有以下成员变量76publicPeople()//无参数println("方法调用前数组a的值:");这不叫静态方法调用非静态方法,这调用的是实例化方法,就是先new一个对象,再用这个对象去调用对象中的实例化方法,到哪里这样调用都没问题(只要方法是public的)。println(aaa.这里可能产生一个问题:同一个类中不同方法之间相互调用时,不就可以直接调用吗?这里需要指出,同一个类的一个方法调用另外一个方法时,如果被调用的方法是实例方法,则默认使用this作为调用者,如果被调用的方法是静态方法,则默认使用类作为调用者。需要调用某个静态方法时,可以使用其所属的类的名称直接调用,也可以用类的某个具体的对象名调用,其格式为:求属性x和y最大值,并返回结果的方法;main方法就是静态方法,javacCommandParameter.类声明之后的一对大括号“{”、“}”以及它们之间的内容称做类体。成员方法对成员变量的操作主要体现在以下两个方面:实例化一个对象,调用对象的这两个方法,输出结果。这一程序设计方法的代表语言是Pascal、C等。privatedoubleheight;publicclassThisExample4{name=name;如果类的定义没有编写构造方法,Java语言会自动为用户提供。setX(-100);Testobject=newTest();publicClass27(){对象的创建和使用作业3.创建简单的银行帐户类,包括开户人、帐号和存款余额三个属性,以及查询余额,存款,取款等方法。创建两个帐户验证类的设计。4.定义一个类,包含两个成员方法,一个为intsum(inta,intb),求两个数的和,另外一个为intaverage(inta,intb,intc),求三个数的平均值。实例化一个对象,调用对象的这两个方法,输出结果。publicPeople()//无参数对象的创建和使用作77对象的创建和使用作业5.定义一个类,该类具有x和y两个属性。定义构造方法初始化这两个属性。类中还定义以下成员方法:求属性x和y的和,并返回结果的方法;求属性x和y的差,并返回结果的方法;求属性x和y的积,并返回结果的方法;求属性x和y的商,并返回结果的方法;求属性x/y的余数,并返回结果的方法;求属性x和y最大值,并返回结果的方法; 求属性x和y最小值,并返回结果的方法;编写主类,测试上面定义的类,使用类中定义的各个方法并将其结果输出。

对象的创建和使用作业5.定义一个类,该类具有x和y两个属性78对象的创建和使用作业6.定义一个类A,类中有一个private类型的整型变量data,一个private类型的字符串对象str。类中有两个构造方法,一个不含参数,初始化data和str为其默认值;另一个有两个参数,分别用来初始化data和str。类中还定义了三个方法,方法的原型与功能分别如下:publicvoidadd(intk,Strings)//该方法把data和str的值分别加上k和s;publicvoidclearA()//该方法把data和str的值分别清除为其默认值;publicStringtoString()//该方法把data和str的值转变为一个字符串返回。returnString.ValueOf(data)编写应用程序测试类TestA,使用类A中的构造方法创建对象,分别使用三个方法并将结果输出。对象的创建和使用作业6.定义一个类A,类中有一个pri79对象的创建和使用作业7.三角形、圆形和梯形的类封装:让学生学习使用类来封装对象的属性和行为。编写一个java程序,该程序中有3个类:Trangle、Lader、Circle,分别用来刻画三角形、梯形和圆形。具体要求如下:Trangle类具有类型为double的三个边以及周长、面积属性,并且具有返回周长、面积以及修改三个边的方法,另外Trangle类还具有一个boolean类型的属性,该属性用来判断三个数是否能构成一个三角形。Lader类具有类型为double的上底、下底、高和面积属性,并具有返回面积的方法。Circle类具有类型为double的半径、周长和面积属性,并具有返回周长和面积的方法。创建3个类的对象,分别求三角形面积和周长,梯形面积以及圆形的面积和周长。对象的创建和使用作业7.三角形、圆形和梯形的类封装:让学生80三角形面积公式已知三角形三边为a,b,c,,p=(a+b+c)/2则三角形面积为:s=Java中的开平方:Math.sqrt(p*(p-a)*(p-b)*(p-c))三角形面积公式已知三角形三边为a,b,c,,p=(a+b+81

面向对象程序设计方法

类的定义构造方法对象的创建和使用this关键字类的封装性静态成员与实例成员方法调用与参数传递匿名对象内容提要

面向对象程序设计方法内容提要82this关键字Java语言提供了丰富的类(Class)、接口(Interface)以及相应的方法(Method)。使用这些类或接口,用户可以定义自己的类或子类,并以这些类为模板创建对象(Object)。在Java语言中,当创建一个对象后,Java虚拟机就会为其分配一个指向对象本身的指针,这个指针就是“this”。关键字this与对象密切相关,在Java程序设计中经常会见到this的使用。通过this可以引用当前对象的成员变量或者调用当前对象的成员方法。this主要有以下几种使用方法:this.成员变量this.成员方法([参数列表])使用this调用构造方法使用this引用当前对象this关键字主要用于类的非静态成员方法(即实例方法)与构造方法中,而在静态方法(即类方法)中是不允许使用this关键字的。this关键字Java语言提供了丰富的类(Class)、接口83this.成员变量

一个对象中的方法一般可以直接访问同一对象的成员变量。但是,有时候方法体内部定义的局部变量和成员变量名字相同,还有时方法的入口参数和对象的成员变量名字相同,那么就需要将三者区别清楚。因此,专门用this来指明当前对象的成员变量。语法格式为:this.成员变量说明:(1)由于this用于表示指向当前对象的引用,所以它不能在类成员方法(静态方法)中使用,只能出现在实例成员方法中。(2)在类的方法体中,如出现形参或局部变量与成员变量同名的情况,系统默认的是形参或局部变量,若需要访问成员变量,则只能使用this来引用。(3)在没有以上同名情况的时候,对于当前对象的成员变量和成员方法的访问可以省略this引用。this.成员变量一个对象中的方法一般可以直接访问同一84关键字this最常见的应用是在类的构造方法中解决构造方法的形式参数与成员变量同名的问题。例如,下面一段程序:publicclassPeople{privateStringname;privateintage;privatechargender;privatedoubleheight;privatedoubletweight;publicPeople(Stringname,intage,chargender,doubleheight,doubleweight){name=name;age=age;gender=gender;height=height;weight=weight;}……}this关键字:构造方法的形式参数与成员变量重名关键字this最常见的应用是在类的构造方法中解决构造方法的形85在上面的一段程序中,共有name、age、gender、height和weight5个实例变量。在构造方法中的5个参数的变量名称与实例成员变量的名称一一对应相同。在参数名或者局部变量名与实例成员变量同名的时候,由于参数变量和局部变量的优先级高,所以在方法体中参数名或者局部变量名将隐藏同名的实例成员变量。这种情况在Java语言中是不被允许的。如果想使实例变量和方法的参数或方法本身定义的局部变量同名的话,就需要用一种方法使实例成员变量与和其同名的方法参数或局部变量区分开来,这就要使用到this关键字。下面的一段程序改写了上面的程序,使People类的构造方法可以合法地使用与实例变量名称相同的参数。this关键字:构造方法的形式参数与成员变量重名在上面的一段程序中,共有name、age、gender、he86publicclassPeople{privateStringname;privateintage;privatechargender;privatedoubleheight;privatedoubletweight;publicPeople(Stringname,intage,chargender,doubleheight,doubleweight){=name;this.age=age;this.gender=gender;this.height=height;this.weight=weight;}……}其中,使用this调用的都是实例变量,例如:,而name是参数变量。由上面的实例,我们可以看出,this在方法体中用来指向调用当前正在执行方法的对象。当然我们也可以通过使用与实例变量名不同的参数名或者局域变量名来避免这个问题。this关键字:构造方法的形式参数与成员变量重名publicclassPeople其中,使用this调用87publicclassClass27{inta;publicClass27(){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论