Java面向对象编程基础_第1页
Java面向对象编程基础_第2页
Java面向对象编程基础_第3页
Java面向对象编程基础_第4页
Java面向对象编程基础_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

第3章Java面向对象编程基础3.1面向对象软件开发概述3.2Java的类3.3构造方法与对象的创建3.4定义和使用Java的方法3.5内部类与匿名类学习要点:1.理解面向对象程序设计的基本概念2.理解Java包中类的基本概念,掌握定义Java类和创建对象的方法3.掌握构造函数:构造函数的特点、构造函数的定义4.掌握方法的定义,理解方法的形式参数与实际参数、方法的返回值、方法的调用过程5.了解内部类和匿名类的定义与使用方式3.1面向对象软件开发概述面向对象程序设计是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法,其核心思想是用面向对象的编程语言把现实世界的实体描述成计算机能理解、可操作的、具有一定属性和行为的对象,将数据及数据的操作封装在一起,通过调用对象的不同方法来完成相关事件。对象、实体与类人classPerson{}Persontom=newPerson()设计方法特点代表性语言面向机器用机器指令为特定硬件系统编制程序,其目标代码短,运行速度和效率高,但可读性和移植性差。86系列汇编语言面向过程用高级程序设计语言按计算机能够理解的逻辑来描述要解决的问题及其解决方法,是过程驱动的,程序的可读性和移植性好,核心是数据结构和算法。但大型程序维护起来比较困难。Fortran(50年代)Basic(60年代)C(70年代)面向对象用面向对象的编程语言把现实世界的实体描述成计算机能理解、可操作的、具有一定属性和行为的对象,将数据及数据的操作封装在一起,通过调用各对象的不同方法来完成相关事件,是事件驱动的,其核心是类和对象,程序易于维护、扩充。C++(80年代)VB(90年代)ObjectPascal(90年代)Java(90年代)3.1.1程序设计方法的发展3.1.2面向对象的几个基本概念对象(Object):系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。由一组属性和施加于该组属性的一组操作构成。对象可以是有形的事物,例如一台电脑;也可以是无形的事物,例如一项工作计划。类(Class):是具有相同属性和操作的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,它由一个类名、一组属性和一组操作构成。属性(Property):是对象的特征,包括状态和行为。事件(Event)——由对象识别的一个外部动作属性动态属性——“行为”,用方法表示静态属性——“状态”,用变量表示类是一个抽象的概念,表示一个有共同特征的对象集合。对象是一个具体的概念,它是类的一个具体的实例。类的作用是创建对象。类是创建对象的模板,对象是类的一个实例。类与对象的关系“人”类和对象“李四”的关系如何理解“对象”?对象的行为是什么?——方法对象的状态是什么?——属性对象的身份是什么?——名称状态可能影响行为每个对象“总是”有不同的身份,一个类的多个对象“可能”有不同的状态名称也叫“引用”三方面特征

包含——当对象A是对象B的属性时,称对象B包含对象A;

如:发动机与汽车,CPU与计算机

继承——当对象A是对象B的特例时,称对象A继承了对象B

如:北京大学和大学,液晶显示器和显示器

关联——当对象A的引用是对象B的属性时,称对象A和对象

B之间是关联关系。

如:汽车与制造商对象的之间关系继承性(inheritance)

自动地共享具有层次关系的类(子类)和对象中的方法和数据的机制。

当类Y继承类X时,就表明类Y是类X的子类,而类X是类Y的超/父类。类Y由两部分组成:继承部分和增加部分。 增加部分是专为Y编写的新代码;继承部分可以是简单的等同,也可以更为丰富:如对性质重命名、重实现、复制、置空等。XY继承部分

增加部分

Y继承X继承方式:简单继承(singleinheritance):一个类至多只能继承一个 类(树结构)。多重继承(multipleinheritance):一个类直接继承多个超 类(网状结构)。类Y1,Y2简单继承类XXYY2Y1X1X2类Y多重继承类X1,X2例:一个图形系统()Figure

Line

Ellipse

Polygon

CloseFigure

OpenFigure

Pentagon

Triangle

Rectangle

Circle

Arc

(象素宽度,颜色,平移,旋转)(填充,边界,周长,面积)(长度)3.1.3面向对象的软件开发过程

面向对象的软件开发过程可以大体划分为三个阶段:面向对象的分析(objectorientedanalysis,OOA)面向对象的设计(objectorienteddesign,OOD)面向对象的实现(objectorientedprogramming,OOP)。(1)面向对象的分析(OOA——

objectorientedanalysis)主要作用:明确用户的需求,并用标准化的面向对象的模型规范地表述这一需求,最后将形成面向对象的分析模型,即OOA模型。分析阶段的工作应该由用户和开发人员共同协作完成。面向对象的分析首先应该明确用户的需求,然后再将这些需求以标准化模型的形式规范地表述出来,即将用户和开发人员头脑中形成的需求以准确的文字、图表等形式表述出来,形成双方都认可的文件。使用OOA的原因如下:(1)它使我们能在人类概括客观事物的三个基本方法(对象及属性、一般—特殊结构和部分—整体结构)的框架上进行定义和交流。(2)它首先着眼于问题空间的理解。(3)它将属性及专用于那些属性的方法视为一个固有的整体。(4)使用自包含分块(对象之间依赖性最小)进行分析和说明。(5)它提供一个支持分析和设计一致的强有力的表示工具。(6)它能适应系列变化的系统和对当前实际运行系统的调整。常使用的OO(描述)方法有多种:BoochBooth方法(86年)Coad&yourdon方法(90年)JamesRumbaugh(OMT)方法(91年)Berard方法FireSmith方法Jacobson(OOSE)方法Martin-Odeu方法Seidewitz-Stark方法Shlaer-Mellor方法Wirfs-Brook方法UML(UnifiedModelingLanguage)方法Coad&Yourdon的OOA模型的5个层次对象—类层:找到要开发的应用软件所对应的各个现实世界的实体,并从中抽象出类和对象。静态属性层:为对象—类层中抽取出来的各个类和对象设计静态属性和它们之间的约束关系。服务层:定义对象和类的动态属性以及对象之间的消息通信。结构层:定义系统中所有对象和类之间的层次结构关系。主题层:将系统定义为若干主题(即子系统),把有关对象划归不同的主题。

从面向对象的分析到面向对象的设计

OOA的各层模型化了“问题空间”,而作为OOA各层扩充的OOD,则模型化一个特定的“实现空间”。这种扩充主要是从增加属性和方法开始的。

OOA是独立于程序设计语言的,初步的OOD在很大程度上依然独立于程序设计语言,而详细OOD是依赖于语言的,并可有效地应用过程式、函数式和面向对象的程序设计语言加以实现。语言的选择对OOD的实施有重要的影响,但不会影响OOD的有效性。(2)面向对象的设计(OOD——

objectorienteddesign)概要设计——构成最初的OOD模型

OOA模型界面管理:负责整个系统的人机交互界面的设计任务管理:负责处理并行操作之类的系统资源管理功能数据管理:负责设计系统与数据库的接口详细设计——对OOD模型进行细化细化分析:是否有可以直接引用的已有类或部件细化设计:设计类,包括类的属性和类之间的相互关系细化验证:验证各对象类公式间是否相容和一致、类成员的访问权限设置是否合理、对象类的功能是否符合用户要求等。(3)面向对象的实现(OOP——

objectorientedprogramming)选择一种合适的面向对象的编程语言用选定的语言编码实现对软件系统中各对象类的详尽描述将编写好的各个类代码模块根据类的相互关系集成起来利用开发人员提供的测试样例和用户提供的测试样例分别检验编码完成的各个模块和整个软件系统。面向对象的软件开发过程小结分析用户需求,从问题中抽取对象模型;将模型细化,设计类,包括类的属性和类之间的相互关系,同时考察是否有可以直接引用的已有类或部件;选定一种面向对象的编程语言,具体编码实现上一阶段类的设计,并在开发过程中引入测试,完善整个解决方案。3.1.4面向对象程序设计的四个特点抽象性指采用数据抽象的方法来构建程序的类、对象和方法,即把系统中需要处理的数据和这些数据上的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型。封装性指利用类将数据和基于数据的操作封装在一起,数据被保护在类的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能与这个类进行交流和交互。继承性指一个类可以从其它已有的类中派生,新类保持了父类中的行为和属性,但增加了新的功能。多态性

指一个程序中可以有同名的不同方法共存的情况。可以利用子类对父类方法的覆盖和重载在同一个类中定义多个同名的方法来实现。3.1.5面向对象程序设计的三大优点可重用性指在一个软件项目中所开发的模块,不仅可以用于本项目,还可以重复地使用在其他项目中。提高了开发效率,缩短了开发周期,降低了开发成本。由于采用了正确、有效的模块,质量得到保证,维护工作量减少。采用可重用模块来构建程序,提高了程序的标准化程度,符合现代大规模软件开发的需求。

可管理性采用类作为构建系统的部件,使整个项目的组织更加合理、方便;把数据和其上的操作封装在一起,仅本类的方法才可以操纵、改变这些数据,效率提高,开发难度降低;指应用软件能够很方便地进行修改和扩充,包括软件的内容、形式和工作机制(如把C/S模式改为B/S模式)的修改和扩充。特别适合于使用在快速原型的软件开发方法中。

使系统维护(包括延伸开发)变得简单和容易,维护工作量和开销大大降低。对模块化技术的更有效的支持。

可扩展性再回首:Java关键字数据类型:bytebooleanchardouble

floatintlong

short,特殊的值:falsetruevoidnulllength程序流程控制:ifelse

switch

case、breakdefault、do–while、for、continue、return类的定义:class

extendsimplements

importinterfacepackagesuperthis非访问控制符:abstractfinalstaticnative特殊运算符:instanceofnew

访问控制符:publicprivateprotected异常处理:trycatchfinallythrowthrows

线程:threadtransientsynchronized3.2Java的类类由数据和方法构成,是Java编程的基础。类既要提供与外部联系的接口,同时又要尽可能隐藏类的实现细节。类属性(数据)方法(操作数据)3.2.1类的定义[修饰符]class

类名[extends

父类][implements

接口名]{

成员变量声明 //域(属性)的声明

方法声明 }publicabstractfinal接口名父类修饰符定义类属性,成员变量定义类方法(1)声明类头:关键字class父类名:跟在extends关键字后,用以说明当前类是已经存在的哪个类的子类。通过定义继承关系,子类可以获得父类的所有属性和方法,并进一步定义它自己的特殊属性.接口名:跟在implements关键字后,用以说明当前类中实现了哪个接口定义的功能和方法。修饰符:说明类的特殊性质,分为访问控制符、抽象说明类和最终类说明符。

(2)声明类体:

定义类的具体内容,包括类的属性与方法

[类的属性]:可以是简单变量,也可以是对象、数组等其他复杂数据结构。声明类属性为简单变量的语法:

[修饰符]变量类型变量名[=变量初值];例:intpassword;声明类属性为对象的语法:[修饰符]类名对象名[=new类名(实际参数列表)];例:PhoneCardmyCard=newPhoneCard();

修饰符有访问控制符、静态修饰符static、最终修饰符final、易失修饰符volatile和过渡修饰符transient。[类的方法]:

即成员函数,它规定类属性上的操作,实现类的内部功能的机制,是类与外部交互的窗口。语法结构:[修饰符]返回值类型

方法名(参数列表)throws

例外名1,例外名2,...{

方法体;

局部变量声明;

语句序列;}

课堂练习:1.编写一个车辆类,其中包括2个域:车辆类别、轮胎数量,2个成员方法:分别用来设置车辆类别和轮胎数量。2.编写一个JavaApplication程序,实现车辆对象的创建,并调用其成员方法将所创建车辆的“车辆类别”设置为“长公交”、轮胎数量设置为6,要求通过字符界面输出所创建与设置的结果。3.2.2类中的“变量”概念辨析:(1)成员变量:在类体变量定义处定义的变量,在整个类内都有效;成员变量包括实例变量和类变量,用static定义的变量是类变量,也叫静态变量;所有对象独享实例变量,但共享类变量;实例变量只能通过对象名访问,类变量既可以通过某个对象名也可以通过类名来访问。(2)局部变量:在类的方法中定义的变量,仅在定义它的方法内有效3.2.3类中的“方法”概念辨析:(1)实例方法:实例方法既可以操作实例变量,也可以操作类变量;实例方法在创建类对象后才分配入口地址;实例方法可以被类创建的任何对象访问,必须通过对象来调用;实例方法可以调用其它方法(包括类方法)。(2)类方法:

用static修饰的方法是类方法,也叫静态方法;

类方法只能操作类变量;类方法在类被加载到内存后就分配了入口地址;类方法可以被类创建的任何对象调用,也可以通过类名来调用,类方法只能调用该类的类方法。本类中方法与变量之间的访问关系

实例方法类方法实例变量类变量用对象名√√√√用类名

√各类之间方法与属性的引用方法

实例方法类方法实例变量类变量局部变量实例方法√√√√√类方法

√√3.3构造方法与对象创建3.3.1构造方法的基本概念构造方法:用来初始化对象(为其所有属性赋初值)的一个特殊方法。(也称构造函数)构造方法名与类名相同构造方法可以有0个或多个参数特点构造方法始终和new关键字一起调用构造方法没有返回值在创建一个类的新对象时,系统自动调用构造方法对其进行初始化。引入构造方法的原因:1)满足面向对象程序设计中对象初始化的需要;2)提高灵活度,使初始化工作除赋值外有更复杂的操作;

在不定义构造方法时,系统会自动为该类生成一个默认(缺省)的构造方法。缺省构造类中可以不出现构造方法,如果没有构造方法,系统将为该类缺省定义一个空构造方法,也称为缺省构造方法。用缺省构造方法初始化对象时,系统用缺省值初始化类对象的数据成员。

各数据类型的缺省值如下:数值型:0布尔型:false字符型:’\0’

类:null3.3.2构造方法的定义例如,可以为Student类定义如下的构造方法,初始化它的2个域:

注意:构造方法定义了几个形式参数,创建对象的语句在调用构造方法时,需要提供几个类型、顺序一致的实际参数,指明新建对象各域的初始值。

Student(Stringm,Strings) { name=m; sex=s; }publicclassTestStudent{publicstaticvoidmain(Stringargs[]){Students1=newStudent(“张华”,“软131”);Students2=newStudent(“丁一”,“软132”);

System.out.println(s1.stuName);

System.out.println(s1.stuClass);

System.out.println(s2.stuNam);}}classStudent{ StringstuName; StringstuClass;

Student(Stringm,Strings) { stuName=m; stuClass=s; }}对象的使用可以用点(.)操作符来调用对象实例的成员变量和方法

(1)域的引用

成员变量引用的形式如下:对象名.variablename

例如可以通过赋值语句修改firstP的值。

firstP=“Henry”;

(2)方法的调用对象的方法调用的一般形式如下:对象名.方法名(参数列表)例如:firstPerson.setAge(30);实参实参classDemo.javapublicclassClassDemo{inta;intb;

ClassDemo()

{a=2;b=3;}

voidshow(){ System.out.println(“a=”+a+”,b=”+b);}

publicstaticvoidmain(Stringargs[])

{newClassDemo().show();}}

成员变量

成员方法classPerson{

Stringname;//姓名

intsex;//性别

int

age;//年龄

Person(Strings1){ name=s1;

}

StringgetName(){

returnname;}voidsetAge(int

d){

age=d;}}

Person类namesexagePerson()构造方法getName()setAge(

)3.3.3创建类的实例对象创建对象的一般格式:类名

新建对象名=new

构造函数();

new是为新建对象开辟内存空间的算符。构造函数()用来完成对象的初始化。如:TextFieldinput=newTextField(6);

建立一个名为input、长度为6的文本框。

Personp1=newPerson(“张三”);

建立一个名为“张三”的人p1。3.4定义和使用Java的方法3.4.1方法的定义Java中,方法只能在类中定义,由方法头和方法体两部分组成。格式:[修饰符]

返回值类型

方法名([参数列表])throws例外名1,例外名2,...{

局部变量/对象声明部分;

语句部分;}方法定义举例例如:定义计算平方值的方法intsquare(intx)

{

ints;

s=x*x;

returns;

}

int是方法返回值类型,square是方法的名字;x是方法的形式参数,s是方法体内的局部变量。方法声明中的修饰符的含义:

[public|protected|private]

[static][final|abstract][native][synchronized]

static:

静态方法(类方法),可通过类名直接调用

abstract:

抽象方法,没有方法体

final:

方法不能被重写

native:

集成其它语言的代码

synchronized:

控制多个并发线程的访问

例:

public

staticvoid

main(String

args[])

{}//主类方法3.4.2方法的参数方法头定义时所带的参数称为形参,它规定了方法的输入数据,调用时所带的参数称为实参。带多个参数时,要指明各参数的类型,并用逗号把各参数分隔开来。“形实结合”时是按位置顺序一一对应的,否则会引发编译错误。多个同名方法通过所带参数不同(包括:顺序、类型、个数)而实现多态。参数传递示例值传递⑴

值传递调用方法时,参数是普通变量,实参将其值传给形参,调用中实参的值不受形参的影响。

⑵引用传递调用方法时,参数的类型为复合数据类型,如:数组、类。实参随形参的变化而变化。参数传递方式分类:3.4.3方法的返回值方法的返回值是方法的输出数据。定义方法头时,通过定义方法返回值类型说明该方法的输出数据类型,用return语句返回确定数值。方法无返回值时,返回值类型应为void。格式:return表达式;例:类的定义publicclassTestClass{ staticints;//定义在此处才可以两个方法都用

publicstaticvoidmain(Stringargs[]) { System.out.println("面积是:"+square(5)+""+s);//可以用两种方法引用返回值

} staticintsquare(intx) {

//ints;

//在此处定义的话,main方法中则不能引用

s=x*x;returns; }}3.4.4方法的使用程序调用方法:

大部分用户自定义的方法都属于程序调用方法。调用命令通过被调用方法的名称来说明要使用哪个自定义的方法,完成“形实结合”,为被调用方法的各形式参数赋初值。如:x=isPrime(i);

当有多个同名方法时,根据参数列表来区分。(2)系统调用方法:

其最大特点是方法定义后,不需要写专门的调用命令,系统会在程序运行过程中自动去调用此方法才完成它所定义的任务。如:init()3.4.5定义方法的步骤和注意事项(1)算法中需要细化的步骤、程序中重复的代码以及重载父类方法都可以定义成类的方法。(2)方法通常具有相对独立的功能和明确的输入输出接口。(3)定义方法分定义方法头和方法体两部分。(4)方法头包括方法名、参数列表、返回值类型、方法修饰和方法抛出的例外列表。重载方法的方法头要与其父类方法的方法头基本一致。(5)方法命名要遵循Java对标识符的规定:以字母、$或-开头,由字母、数字组成。

(6)参数列表是方法的输入接口,它列

温馨提示

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

评论

0/150

提交评论