《第04章面向对象技术基础优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第04章面向对象技术基础优秀PPT.ppt(98页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第04章面向对象技章面向对象技术基础术基础现在学习的是第1页,共98页主要内容主要内容4.1 4.1 面向对象的基本概念面向对象的基本概念面向对象的基本概念面向对象的基本概念4.2 4.2 类的定义类的定义类的定义类的定义4.3 4.3 类和对象的使用类和对象的使用类和对象的使用类和对象的使用 4.4 4.4 包包包包packagepackage4.5 4.5 成员变量及方法的访问权限成员变量及方法的访问权限成员变量及方法的访问权限成员变量及方法的访问权限4.6 final4.6 final、thisthis及其它及其它及其它及其它 现在学习的是第2页,共98页4.1 面向对象的基本概念面向
2、对象的基本概念4.1.1面向对象编程的概念面向对象编程的概念 4.1.2客观事物的抽象客观事物的抽象现在学习的是第3页,共98页4.1.1面向对象编程的概念面向对象编程的概念 1、面向、面向过程过程编程:编程:我们很多人使用过Fortran、Basic,C等面向过程的程序设计语言,这些语言是按流程化流程化的思想来组织的。在这些语言的设计思想中,通常将存放基本数据类型的变量作为程序处理对象、以变量的赋值作为程序的基本操作、以变量值的改变作为程序运行的状态。这种程序设计风格存在着数据抽象简数据抽象简单、信息完全暴露、算法复杂、无法很好地描述客单、信息完全暴露、算法复杂、无法很好地描述客观世界等缺点
3、观世界等缺点。在程序设计过程中,为了实现有限度的代码重用,公共代码被组织成为过程或函数。当需要代码重用时,调用已经组织好的过程或函数。在这种应用方式中,如果软件项目庞大,程序的调如果软件项目庞大,程序的调试和维护将变得异常困难试和维护将变得异常困难。现在学习的是第4页,共98页4.1.1面向对象编程的概念面向对象编程的概念 2、面向、面向对象对象编程:编程:而面向对象的程序设计思想是将数据以及对于将数据以及对于这些数据的操作,封装在了一个单独的数据结构中这些数据的操作,封装在了一个单独的数据结构中。这种模式更近似于现实世界,在这里,所有的对象都同时拥有属性以及与这些属性相关的行为。对象之间的联
4、系是通过消息来实现的,消息是请求对象执行某一处理或回答某些信息的要求。某个对象在执行相应的处理时,可以通过传递消息请求其他对象完成某些处理工作或回答某些消息。其他对象在执行所要求的处理活动时,同样可以通过传递消息和另外的对象联系。所以,一个面向对象程序的执行,就是靠对象间传递消息来完成的。现在学习的是第5页,共98页4.1.1面向对象编程的概念面向对象编程的概念 面向对象编程:面向对象编程:面向对象程序设计是一种新兴的程序设计方法,或者是一种新的程序设计规范,它使用对象、类、继对象、类、继承、封装、消息等基本概念来进行程序的设计承、封装、消息等基本概念来进行程序的设计。从现实世界中客观存在的事
5、物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。其应用领域不仅仅是软件,还有计算机体系结构和人工智能等。现在学习的是第6页,共98页4.1.1面向对象编程的概念面向对象编程的概念 面向对象的三大特点:面向对象的三大特点:封装、继承、多态封装、继承、多态 1)封装 封装就是把对象的属性和和对这些属性的操作封装在一个单独的数据结构中,并尽可能隐蔽对象的内部细节,包含两个含义:n n把对象的全部属性和对属性的全部操作结合在一起,把对象的全部属性和对属性的全部操作结合在一起,形成一个不可分割的独立
6、单元(即对象)。形成一个不可分割的独立单元(即对象)。n n信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界或者说形成一道屏障或者说形成一道屏障,只保留有,只保留有限的对外接口使之与外部发生联系。限的对外接口使之与外部发生联系。现在学习的是第7页,共98页4.1.1面向对象编程的概念面向对象编程的概念 面向对象的三大特点:面向对象的三大特点:封装、继承、多态封装、继承、多态 2)继承 继承是一种由已有的类创建新类的机制。利用继承,我们可以先创建一个拥有共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。由继承而得到的类
7、称为子类,被继承的类称为父类或超类。Java不支持多重继承,子类只能有一个父类。在Java编程语言中,通过继承可利用已有的类,并扩展它的属性和方法。这个已有的类可以是语言本身提供的、其他程序员编写的或程序员原来编写的。继承在Java中无所不在。现在学习的是第8页,共98页4.1.1面向对象编程的概念面向对象编程的概念 面向对象的三大特点:面向对象的三大特点:封装、继承、多态封装、继承、多态 3)多态对象的多态是由封装和继承引出的面向对象程序设计语言的另一特征。主要体现在两个方面:方法重载时实现的静态多态和方法重载时实现的动态多态。多态性使得我们的同一方法,可以有多种形式。另外父类中定义的属性或
8、方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,同一个属性或方法在父类及其各个子类中可以具有不同的语义。现在学习的是第9页,共98页4.1.2客观事物的抽象客观事物的抽象 为了使计算机能够处理和理解客观事物,必须为了使计算机能够处理和理解客观事物,必须对事物进行抽象,以求得事物的本质。现实事物纷对事物进行抽象,以求得事物的本质。现实事物纷繁复杂,因此,在事物抽象过程中,必须忽略抽象繁复杂,因此,在事物抽象过程中,必须忽略抽象事物中那些与当前目的无关的特征,求取对当前需事物中那些与当前目的无关的特征,求取对当前需求有直接影响的因素。因此,针对客观事物的抽象求有直接影响的因素。因此,
9、针对客观事物的抽象必须掌握一定的抽象原则。必须掌握一定的抽象原则。我们知道,当确定了一个圆形的圆心位置和圆的半径后,就可以在平面上确定一个圆。因此,抽象出来的圆的要素为圆心和半径。现在学习的是第10页,共98页4.1.2客观事物的抽象客观事物的抽象用数据结构来表示,如下:用数据结构来表示,如下:class Circleclass Circlepoint center;/point center;/圆心圆心float radius;/float radius;/半径半径 其中其中classclass是面向对象程序设计常用来定义是面向对象程序设计常用来定义“类类”这种数这种数据结构的关键字。据结构
10、的关键字。现在学习的是第11页,共98页4.1.2客观事物的抽象客观事物的抽象添加一些基本的行为如获取圆的面积,表示如下:添加一些基本的行为如获取圆的面积,表示如下:class Circle class Circle point center;/point center;/属性或成员属性或成员 float radius;/float radius;/属性或成员属性或成员 double getArea()/double getArea()/方法方法 return radius*radius*3.1415926;return radius*radius*3.1415926;现在学习的是第12页,共
11、98页4.1.2客观事物的抽象客观事物的抽象添加一些基本的行为如获取圆的面积,表示如下:添加一些基本的行为如获取圆的面积,表示如下:class Circle class Circle point center;/point center;/属性或成员属性或成员 float radius;/float radius;/属性或成员属性或成员 double getArea()/double getArea()/方法方法 return radius*radius*3.1415926;return radius*radius*3.1415926;现在学习的是第13页,共98页第第4章章 面向对象程序设计
12、基础面向对象程序设计基础4.1 4.1 面向对象的基本概念面向对象的基本概念面向对象的基本概念面向对象的基本概念4.2 4.2 类的定义类的定义类的定义类的定义4.3 4.3 类和对象的使用类和对象的使用类和对象的使用类和对象的使用 4.4 4.4 包包包包packagepackage4.5 4.5 成员变量及方法的访问权限成员变量及方法的访问权限成员变量及方法的访问权限成员变量及方法的访问权限4.6 final4.6 final、thisthis及其它及其它及其它及其它 现在学习的是第14页,共98页4.2 类的定义类的定义4.2.1 类声明类声明4.2.2 类体类体4.2.3 实例化对象实
13、例化对象4.2.4 构造方法说明构造方法说明 4.2.5 对象的清除对象的清除4.2.6 方法重载方法重载现在学习的是第15页,共98页4.2.1类声明类声明类的类的类的类的声明声明声明声明举例:举例:举例:举例:class class CircleCircle point center;/point center;/属性或成员属性或成员 float radius;/float radius;/属性或成员属性或成员 double getArea()/double getArea()/方法方法 return radius*radius*3.1415926;return radius*radius
14、*3.1415926;public class public class RectangleRectangle extends Shapes implement Display extends Shapes implement Display /类体类体 /下面的下面的RectangleRectangle类继承了类继承了ShapesShapes父类,实现了接口父类,实现了接口 DisplayDisplay,是一个公共类。是一个公共类。现在学习的是第16页,共98页4.2.1类声明类声明类声明的格式如下:类声明的格式如下:类声明的格式如下:类声明的格式如下:修饰符修饰符修饰符修饰符 class
15、class 类名类名类名类名 extends extends 超类名超类名超类名超类名 implements implements接口名列表接口名列表接口名列表接口名列表 可能的选项有:可能的选项有:可能的选项有:可能的选项有:publicabstract|final class publicabstract|final class 类名类名类名类名 extends extends 超类名超类名超类名超类名 implements implements 接口名列表接口名列表接口名列表接口名列表 public(public(公共公共):publicpublic修饰的类能被所有的类访问。修饰的类能被
16、所有的类访问。abstract(abstract(抽象抽象):abstractabstract修饰的类不能被实例化,它包含修饰的类不能被实例化,它包含 有未实有未实现的方法。现的方法。final(final(最终最终):finalfinal修饰的类不能被继承,即不能有子类。修饰的类不能被继承,即不能有子类。注意:注意:abstractabstract和和finalfinal不能同时作为一个类的修饰符。不能同时作为一个类的修饰符。现在学习的是第17页,共98页4.2.1类声明类声明类名:类名:类名:类名:习惯上类名的第一个字母大写习惯上类名的第一个字母大写,但这不是必须的。类的名字不但这不是必须
17、的。类的名字不能是能是Java Java 中的关键字中的关键字,要符合标识符规定要符合标识符规定,即名字可以由字母即名字可以由字母,下划线下划线,数字或美圆符号组成数字或美圆符号组成,并且第一个字符不能是数字。但给类命名并且第一个字符不能是数字。但给类命名时时,最好遵守如下习惯最好遵守如下习惯最好遵守如下习惯最好遵守如下习惯:如果类名使用拉丁字母如果类名使用拉丁字母,那么名字的那么名字的首写字母使用大写字首写字母使用大写字首写字母使用大写字首写字母使用大写字母母,例例如如HelloHello、TimeTime、PeoplePeople等。等。类名最好类名最好见名知意见名知意见名知意见名知意,当
18、类名由几个当类名由几个”单词单词”复合而成时复合而成时,每个单词每个单词的首写字母使用大写的首写字母使用大写,如如BeijingTimeBeijingTime、AmericanMapAmericanMap、ChongQingChongQing,CarNumberCarNumber等。等。现在学习的是第18页,共98页4.2.1类声明类声明extends(extends(继承继承继承继承):extendsextends保留字用来表明新创建的类继承哪个类,被继承的类保留字用来表明新创建的类继承哪个类,被继承的类称为此类的父类。称为此类的父类。extendsextends后面只能跟一个父类名。后面只
19、能跟一个父类名。implements(implements(实现实现实现实现):用来表明这个类实现了哪些接口,接口名可以有多个。用来表明这个类实现了哪些接口,接口名可以有多个。例如:下面的类是合法的:例如:下面的类是合法的:class class MyC1assMyC1ass /空类,没有任何用处,但是合法空类,没有任何用处,但是合法 又如:下面的又如:下面的RectangleRectangle类继承了类继承了ShapesShapes父类,实现了接口父类,实现了接口DisplayDisplay,是一个公共类。,是一个公共类。public class public class Rectangle
20、Rectangle extendsextends Shapes Shapes implementimplement Display Display /类体类体 现在学习的是第19页,共98页4.2.2类体类体 类体中定义了该类所有的成员变量和该类所支持的方法,其格式说明类体中定义了该类所有的成员变量和该类所支持的方法,其格式说明如下:如下:成员变量说明成员变量说明成员变量说明成员变量说明 成员方法说明成员方法说明成员方法说明成员方法说明 现在学习的是第20页,共98页4.2.2类体类体 类体:类体:类体:类体:public|protected|private static public|pro
21、tected|private static final transient volatile final transient volatile type variableName;type variableName;/成员变量成员变量成员变量成员变量public|protected|private staticpublic|protected|private staticfinal|abstract native synchronizedfinal|abstract native synchronizedreturnType methodName(paramList)throws return
22、Type methodName(paramList)throws exceptionListexceptionListstatements statements /成员方法成员方法成员方法成员方法 现在学习的是第21页,共98页4.2.2类体类体 1 1成员变量说明成员变量说明成员变量说明成员变量说明 成员变量又称值域。成员变量的说明类似于方法的局部变量说明,成员变量又称值域。成员变量的说明类似于方法的局部变量说明,所不同的是,成员变量定义在类中,是类成员的一部分,整个类都可所不同的是,成员变量定义在类中,是类成员的一部分,整个类都可以访问它。以访问它。JavaJava中成员变量说明形式如下:
23、中成员变量说明形式如下:修饰符修饰符修饰符修饰符 成员变量类型成员变量类型成员变量类型成员变量类型 成员变量名列表成员变量名列表成员变量名列表成员变量名列表;例如:例如:private int number;private int number;成员变量的修饰符有以下几种:缺省访问修饰符、成员变量的修饰符有以下几种:缺省访问修饰符、publicpublic、protectedprotected、privateprivate、finalfinal、staticstatic、transienttransient和和volatilevolatile。关于这些修饰关于这些修饰符的含义以后将讲到。符的含
24、义以后将讲到。现在学习的是第22页,共98页4.2.2类体类体 2 2成员变量使用成员变量使用成员变量使用成员变量使用 类的成员变量在定义它的类内部,可以直接通过成员变量名来访问。类的成员变量在定义它的类内部,可以直接通过成员变量名来访问。类的成员变量在定义它的类内部,可以直接通过成员变量名来访问。类的成员变量在定义它的类内部,可以直接通过成员变量名来访问。class Circle class Circle static final float PI=3.1415926f;/static final float PI=3.1415926f;/常量常量常量常量 private Point cen
25、ter;/private Point center;/属性或成员属性或成员属性或成员属性或成员 private float radius;/private float radius;/属性或成员属性或成员属性或成员属性或成员 static Color color;static Color color;public float area;public float area;float getArea()/float getArea()/方法方法方法方法 return radius*radius*PI;/return radius*radius*PI;/内部访问成员变量内部访问成员变量内部访问成员
26、变量内部访问成员变量 现在学习的是第23页,共98页4.2.2类体类体 如果从类的外部访问,类变量和类对象变量的使用方法是不同。如果从类的外部访问,类变量和类对象变量的使用方法是不同。如果从类的外部访问,类变量和类对象变量的使用方法是不同。如果从类的外部访问,类变量和类对象变量的使用方法是不同。访问类变量的格式如下:访问类变量的格式如下:访问类变量的格式如下:访问类变量的格式如下:类名类名.类变量类变量类变量类变量名名 例如我们可以采用下面形式访问上例中的静态变量例如我们可以采用下面形式访问上例中的静态变量例如我们可以采用下面形式访问上例中的静态变量例如我们可以采用下面形式访问上例中的静态变量
27、colorcolor的:的:的:的:Circle.colorCircle.color,由此可见,访问类变量与类的对象构造和对象都无,由此可见,访问类变量与类的对象构造和对象都无,由此可见,访问类变量与类的对象构造和对象都无,由此可见,访问类变量与类的对象构造和对象都无关。类变量名必须用关。类变量名必须用关。类变量名必须用关。类变量名必须用staticstatic修饰。更详细的说明见后面的章节。修饰。更详细的说明见后面的章节。修饰。更详细的说明见后面的章节。修饰。更详细的说明见后面的章节。访问实例变量的格式如下:访问实例变量的格式如下:访问实例变量的格式如下:访问实例变量的格式如下:对象名对象名
28、.实例变量实例变量名名 例如例如例如例如Circle c1=new Circle();/c1Circle c1=new Circle();/c1是对象名是对象名是对象名是对象名System.out.println(System.out.println(“area=area=”+c1.area);+c1.area);System.out.println(System.out.println(“Color=Color=”+Circle.color);+Circle.color);现在学习的是第24页,共98页class Circle class Circle static final float
29、PI=3.1415926f;/static final float PI=3.1415926f;/常量常量常量常量 private Point center;/private Point center;/private float radius;/private float radius;/实例变量实例变量实例变量实例变量 static Color color;/static Color color;/类变量类变量类变量类变量 public float area;public float area;float getArea()/float getArea()/实例方法实例方法实例方法实例方法
30、 area=radius*radius*PI;area=radius*radius*PI;return area;/return area;/内部访问成员变量内部访问成员变量内部访问成员变量内部访问成员变量 访问:访问:访问:访问:Circle c1=new Circle();/c1Circle c1=new Circle();/c1是对象名是对象名是对象名是对象名System.out.println(System.out.println(“area=area=”+c1.area);+c1.area);System.out.println(System.out.println(“Color=C
31、olor=”+Circle.color);Circle.color);现在学习的是第25页,共98页4.2.2类体类体 3 3、成员方法说明、成员方法说明、成员方法说明、成员方法说明 在在在在JavaJava中,方法总是中,方法总是中,方法总是中,方法总是JavaJava类的一个组成部分。通过类的方法,改变对类的一个组成部分。通过类的方法,改变对类的一个组成部分。通过类的方法,改变对类的一个组成部分。通过类的方法,改变对象的状态。方法说明分为方法首部说明和方法体两部分。象的状态。方法说明分为方法首部说明和方法体两部分。象的状态。方法说明分为方法首部说明和方法体两部分。象的状态。方法说明分为方法
32、首部说明和方法体两部分。方法首部说明的格式如下:方法首部说明的格式如下:方法首部说明的格式如下:方法首部说明的格式如下:方法修饰符方法修饰符 返回值类型返回值类型 方法名(方法名(形参列表形参列表)throwsthrows异常列表异常列表 可能的选项有:可能的选项有:可能的选项有:可能的选项有:public|protected|private public|protected|private staticfinal|abstract native synchronized staticfinal|abstract native synchronized returnType methodNam
33、e(paramList)throws exceptionList/returnType methodName(paramList)throws exceptionList/方法方法声明声明 现在学习的是第26页,共98页4.2.2类体类体 4.4.方法体方法体方法体方法体 方法体是实现这个方法的代码段,它由方法体是实现这个方法的代码段,它由方法体是实现这个方法的代码段,它由方法体是实现这个方法的代码段,它由“”和和和和“”括起来的语句序列括起来的语句序列括起来的语句序列括起来的语句序列构成。方法体也可以是一个分号构成。方法体也可以是一个分号构成。方法体也可以是一个分号构成。方法体也可以是一个分
34、号“;”,表示无方法体,该方法没有实,表示无方法体,该方法没有实,表示无方法体,该方法没有实,表示无方法体,该方法没有实现。当且仅当方法的修饰符中有现。当且仅当方法的修饰符中有现。当且仅当方法的修饰符中有现。当且仅当方法的修饰符中有abstractabstract或或或或nativenative时,方法才无方时,方法才无方时,方法才无方时,方法才无方法体。法体。法体。法体。例如求解三角形问题时可以编写例如求解三角形问题时可以编写例如求解三角形问题时可以编写例如求解三角形问题时可以编写TriangleTriangle类,在类,在类,在类,在TriangleTriangle类可以有如类可以有如类可
35、以有如类可以有如下的下的下的下的3 3个方法。程序如下:个方法。程序如下:个方法。程序如下:个方法。程序如下:现在学习的是第27页,共98页4.2.2类体类体 4.4.方法体方法体方法体方法体 class Triangle class Triangle double sideA,sideB,sideC;/double sideA,sideB,sideC;/三角形的三边三角形的三边三角形的三边三角形的三边 void setSide(double a,double b,double c)/void setSide(double a,double b,double c)/该方法用来赋初值该方法用来赋
36、初值该方法用来赋初值该方法用来赋初值 sideA=a;sideA=a;sideB=b;sideB=b;sideC=c;sideC=c;boolean isOrNotTriangle()/boolean isOrNotTriangle()/判断是否是三角形的方法判断是否是三角形的方法判断是否是三角形的方法判断是否是三角形的方法 if(sideA+sideBsideC&sideA+sideCsideB&sideB+sideCsideA)if(sideA+sideBsideC&sideA+sideCsideB&sideB+sideCsideA)return true;return true;else
37、 else return flase;return flase;现在学习的是第28页,共98页4.2.2类体类体 5 5方法的调用方法的调用方法的调用方法的调用 成员方法又分为类方法(静态方法)和对象方法(实例方法)成员方法又分为类方法(静态方法)和对象方法(实例方法)成员方法又分为类方法(静态方法)和对象方法(实例方法)成员方法又分为类方法(静态方法)和对象方法(实例方法)两类。他们的调用是有区别的。两类。他们的调用是有区别的。两类。他们的调用是有区别的。两类。他们的调用是有区别的。前面已经简单讨论了类变量。类变量不属于由类定义的个别实例对象,前面已经简单讨论了类变量。类变量不属于由类定义的
38、个别实例对象,前面已经简单讨论了类变量。类变量不属于由类定义的个别实例对象,前面已经简单讨论了类变量。类变量不属于由类定义的个别实例对象,而是属于定义它的类;实例变量是针对实例的。这些讨论同样也适用而是属于定义它的类;实例变量是针对实例的。这些讨论同样也适用而是属于定义它的类;实例变量是针对实例的。这些讨论同样也适用而是属于定义它的类;实例变量是针对实例的。这些讨论同样也适用于类方法。于类方法。于类方法。于类方法。类方法调用形式如下:类方法调用形式如下:类名类名.类静态方法名类静态方法名(实参列表实参列表)对象方法调用形式如下:对象方法调用形式如下:类对象名类对象名.类非静态方法名类非静态方法
39、名(实参列表实参列表)例如例如Circle c1=new Circle();/r1Circle c1=new Circle();/r1是对象名是对象名System.out.println(System.out.println(“area=area=”+c1.getArea();+c1.getArea();现在学习的是第29页,共98页4.2.3 实例化对象实例化对象 前面讲过,类是创建对象的模板前面讲过,类是创建对象的模板前面讲过,类是创建对象的模板前面讲过,类是创建对象的模板.当使用一个类创建了一个对象当使用一个类创建了一个对象当使用一个类创建了一个对象当使用一个类创建了一个对象时时时时,我
40、们也说我们给出了这个类的一个实例。通常的格式为:我们也说我们给出了这个类的一个实例。通常的格式为:我们也说我们给出了这个类的一个实例。通常的格式为:我们也说我们给出了这个类的一个实例。通常的格式为:Type objectName=new Type(parameterList);Type objectName=new Type(parameterList);创建一个对象包括对象的声明、为对象分配内存空间和赋初值创建一个对象包括对象的声明、为对象分配内存空间和赋初值创建一个对象包括对象的声明、为对象分配内存空间和赋初值创建一个对象包括对象的声明、为对象分配内存空间和赋初值三个步骤。三个步骤。三个步
41、骤。三个步骤。1 1、对象的声明格式为:、对象的声明格式为:、对象的声明格式为:、对象的声明格式为:类的名字类的名字类的名字类的名字 对象名字对象名字对象名字对象名字;如如如如 People zhangPingPeople zhangPing;或或或或 People zhangPingPeople zhangPing ,LiYongLiYong;这里这里这里这里People People 是一个类的名字是一个类的名字是一个类的名字是一个类的名字,zhangPing,zhangPing是我们声明的对象的名字是我们声明的对象的名字是我们声明的对象的名字是我们声明的对象的名字.现在学习的是第30页,
42、共98页4.2.3 实例化对象实例化对象2 2、为声明的对象分配内存为声明的对象分配内存.使用使用new new 运算符和类的构造方法为声明的对象分配内存运算符和类的构造方法为声明的对象分配内存,如果类中没有如果类中没有构造方法构造方法,系统会调用默认的构造方法。默认的构造方法是无参数的系统会调用默认的构造方法。默认的构造方法是无参数的,构造方法的名字必须和类名相同。用构造方法的名字必须和类名相同。用newnew可以为一个类实例化多个可以为一个类实例化多个不同的对象,这些对象分别占用不同的内存空间,因此改变其不同的对象,这些对象分别占用不同的内存空间,因此改变其中一个对象的状态不会影响其他对象
43、的状态。中一个对象的状态不会影响其他对象的状态。3 3、最后一步是执行构造方法,进行初始化。、最后一步是执行构造方法,进行初始化。zhangPing=new People(zhangPing=new People(“2004010120040101”););liYong=new People(liYong=new People(“2004010220040102”);/);/实例化另外一个对象。实例化另外一个对象。上面三个步骤,通常可以写成如下简洁的形式:上面三个步骤,通常可以写成如下简洁的形式:People zhangPing=new People(People zhangPing=new
44、People(“2004010120040101”););现在学习的是第31页,共98页4.2.3 实例化对象实例化对象【例例4-14-1】下面的例子将建立雇员信息类下面的例子将建立雇员信息类EmpInfoEmpInfo,并实例化对象,并实例化对象,然后打印出若干信息。然后打印出若干信息。/EmpInfo.java/EmpInfo.javapublic class EmpInfo public class EmpInfo String name;/String name;/雇员的姓名雇员的姓名 String designation;/String designation;/雇员的职务雇员的职务
45、 String department;/String department;/雇员的部门雇员的部门 void print()/void print()/成员方法成员方法 System.out.println(name+is +designation+at +System.out.println(name+is +designation+at +department);department);现在学习的是第32页,共98页4.2.3 实例化对象实例化对象 public static void main(String argv)public static void main(String argv
46、)EmpInfo employee=new EmpInfo();/EmpInfo employee=new EmpInfo();/创建对象并实例化创建对象并实例化 employee.name=Robert Javaman ;/employee.name=Robert Javaman ;/给成员变量赋值给成员变量赋值 employee.designation=Manager ;/employee.designation=Manager ;/给成员变量赋值给成员变量赋值 employee.department=Coffee Shop ;/employee.department=Coffee Sho
47、p ;/给成员变量赋值给成员变量赋值 employee.print();/employee.print();/调用方法调用方法print()print()运行结果如下:运行结果如下:Robert Javaman is Manager at Coffee ShopRobert Javaman is Manager at Coffee Shop现在学习的是第33页,共98页4.2.4构造方法构造方法每当由类构造对象时都要调用该类特定的构造方法,在每当由类构造对象时都要调用该类特定的构造方法,在JavaJava中,每个类中,每个类都至少有一个构造方法。构造方法可以确保用户正确地构造类的都至少有一个构
48、造方法。构造方法可以确保用户正确地构造类的对象,同时,构造方法也会对对象作初始化工作。对象,同时,构造方法也会对对象作初始化工作。构造方法说明形式如下:构造方法说明形式如下:构造方法修饰符构造方法修饰符构造方法修饰符构造方法修饰符 方法名(方法名(方法名(方法名(形式参数列表形式参数列表形式参数列表形式参数列表)throwsthrows异常列表异常列表异常列表异常列表 方法体方法体方法体方法体 构造方法修饰符与一般方法修饰符相同,读者可参见构造方法修饰符与一般方法修饰符相同,读者可参见4.2.24.2.2小节。小节。现在学习的是第34页,共98页4.2.4构造方法构造方法 构造方法不能像一般的
49、方法那样被直接调用,它是在构造类的实构造方法不能像一般的方法那样被直接调用,它是在构造类的实例的时候被例的时候被newnew关键字调用的。当我们构造一个类的实例的时候,关键字调用的。当我们构造一个类的实例的时候,编译器主要完成以下三件事情:编译器主要完成以下三件事情:(1)(1)为对象分配内存空间;为对象分配内存空间;(2)(2)初始化对象中的实例变量的值,初始值可以是缺省值,或初始化对象中的实例变量的值,初始值可以是缺省值,或者变量按指定的值初始化;者变量按指定的值初始化;(3)(3)调用对象的构造方法。调用对象的构造方法。一个类的构造方法可以有多个,它们都具有相同的方法名,即一个类的构造方
50、法可以有多个,它们都具有相同的方法名,即类名。编译器根据参数的类型来决定调用哪个构造方法。这就是类名。编译器根据参数的类型来决定调用哪个构造方法。这就是构造方法的多态。构造方法的多态。现在学习的是第35页,共98页4.2.4构造方法构造方法 构造方法分为构造方法分为缺省的构造方法缺省的构造方法(不带参数)和(不带参数)和带参数的构造方法。带参数的构造方法。(1 1)缺省的构造方法)缺省的构造方法 如果类的定义没有编写构造方法,如果类的定义没有编写构造方法,JavaJava语言会自动为用户提供。语言会自动为用户提供。这个由这个由JavaJava自动提供的构造方法就是所谓的缺省构造方法。缺省自动提