《第四章 类与面向对象编程.ppt》由会员分享,可在线阅读,更多相关《第四章 类与面向对象编程.ppt(78页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第四章第四章 类与面向对象编程类与面向对象编程n面向对象编程基础面向对象编程基础n类的编程实现类的编程实现n对象的定义与使用对象的定义与使用n重载重载n访问控制符访问控制符n其他修饰符其他修饰符目标:目标:面向对象编程思想面向对象编程思想学习重点:学习重点:类、对象、构造方类、对象、构造方法、重载法、重载 4.1 4.1 面向对象编程基础面向对象编程基础 4.1.1 4.1.1 面向对象编程的基本概念面向对象编程的基本概念 面向对象编程与传统的面向过程编程的区别面向对象编程与传统的面向过程编程的区别 面向过程编程:按照计算机的问题处理逻辑来描述和面向过程编程:按照计算机的问题处理逻辑来描述和
2、处理现实世界中的具体问题,采用结构化程序设处理现实世界中的具体问题,采用结构化程序设 计和编程方法,将复杂任务逐步分解为多个子任计和编程方法,将复杂任务逐步分解为多个子任 务,用一组函数实现任务求解。务,用一组函数实现任务求解。(动动宾结构宾结构)面向对象编程:程序的设计和编写力求符合人们的思面向对象编程:程序的设计和编写力求符合人们的思 维方式,让计算机处理模拟人们对现实世界的问维方式,让计算机处理模拟人们对现实世界的问 题求解方法,使现实世界中的事务与面向对象程题求解方法,使现实世界中的事务与面向对象程 序中的类和对象相对应。(序中的类和对象相对应。(主主谓结构)谓结构)4.1.1 4.1
3、.1 面向对象编程的基本概念面向对象编程的基本概念 1 1、对象、对象(ObjectObject):):两个层次,一一对应两个层次,一一对应-客观存在。客观存在。n现实生活中的对象:客观世界中的实体(属性和行为);现实生活中的对象:客观世界中的实体(属性和行为);n程序中的对象:变量和相关方法的集合(数据和方法);程序中的对象:变量和相关方法的集合(数据和方法);即类是对象的抽象,而对象则是类的实例化(具体化即类是对象的抽象,而对象则是类的实例化(具体化)实体对象(有共同特征)描述映射抽象抽象数据类型程序对象类 4.1.1 4.1.1 面向对象编程的基本概念面向对象编程的基本概念 2 2、类、
4、类(ClassClass)-对应现实世界的类别对应现实世界的类别n将具有共性的一类对象,抽象为将具有共性的一类对象,抽象为“类类”-概念上的意义。概念上的意义。n是一种数据类型,在是一种数据类型,在JavaJava中是一种复合中是一种复合/引用数据类型。引用数据类型。n类是创建某一类对象的模板,属于类的某个对象为类的类是创建某一类对象的模板,属于类的某个对象为类的一个实例,使用对象前需要先定义它所属的类。一个实例,使用对象前需要先定义它所属的类。n类中定义一类对象类中定义一类对象共有共有的变量和方法。的变量和方法。n类的定义可实现代码的复用。我们不用去描述每一个对类的定义可实现代码的复用。我们
5、不用去描述每一个对象象(如某辆汽车如某辆汽车),),而是通过创建类而是通过创建类(如汽车类如汽车类)的一个实的一个实例来创建类的一个对象例来创建类的一个对象,这大大减化了软件的设计。这大大减化了软件的设计。4.1.1 4.1.1 面向对象编程的基本概念面向对象编程的基本概念 3 3、成员与方法成员与方法 抽抽象象为为一一个个类类的的不不同同对对象象具具有有许许多多相相同同的的特特点点,这这些些特特点点基基本本上上可可以以分分为为两两类类:一一是是描描述述对对象象静静态态状状态态的的,这这就就是是对对象象的的属属性性/状状态态,在在程程序序设设计计中中,称称之之为为变变量量(VariableVa
6、riable)/成成员员;另另一一个个是是描描述述对对象象的的动动作作和和行行为为,这这就就是是对对象象的的方方法法(MethodMethod),方方法法决定了该类中的数据如何使用。决定了该类中的数据如何使用。例:例:“汽车汽车”的属性:颜色、重量、功率、速度等;的属性:颜色、重量、功率、速度等;方法:前进、后退、加速、减速等。方法:前进、后退、加速、减速等。汽车类示例汽车类示例 class Carclass Car int int color_numbercolor_number;int weight;int weight;void brake();void brake();void voi
7、d speedUpspeedUp();();void void slowDownslowDown();();4.1.2 4.1.2 面向对象编程的优点面向对象编程的优点 与面向过程编程相比较,面向对象编程与面向过程编程相比较,面向对象编程具有如下优点:具有如下优点:n提高了程序的可维护性提高了程序的可维护性(全局变量全局变量-不共享数据不共享数据)n可重用性高可重用性高-继承(提高效率,降低成本)继承(提高效率,降低成本)n保护数据保护数据-封装封装类比:组装电脑类比:组装电脑 4.1.3 4.1.3 对象的对象的抽象抽象 抽象是一种思维形式,就是把事物共同点抽取出抽象是一种思维形式,就是把事
8、物共同点抽取出来,以统一的方式进行概要描述的一种过程。来,以统一的方式进行概要描述的一种过程。轿轿 车车卡卡 车车公交车公交车汽车汽车对象对象类类汽车汽车火车火车轮船轮船飞机飞机对象对象交通工具交通工具类类具体化具体化/实例化实例化抽象抽象 4.1.3 4.1.3 对象的对象的抽象抽象n面向对象的编程中,系统由多个包含不同属性和方法的对面向对象的编程中,系统由多个包含不同属性和方法的对象组成,每个对象实现部分功能。(如上页交通工具)象组成,每个对象实现部分功能。(如上页交通工具)n什么是什么是抽象抽象:用面向对象的方法解决现实世界的问题时去:用面向对象的方法解决现实世界的问题时去掉物体中与问题
9、不相关的部分,形成所需要类的过程,称掉物体中与问题不相关的部分,形成所需要类的过程,称为抽象。为抽象。n采用数据抽象方法采用数据抽象方法-构建程序的类构建程序的类实体实体现实现实世界世界概念概念模型模型抽象抽象对象对象类类抽抽象象实实例例化化映射映射计算机中的实现计算机中的实现 4.1.4 4.1.4 封装封装n什么是封装什么是封装:封装是将:封装是将数据数据和对数据的和对数据的操作操作封装在一封装在一个个抽象的数据类型抽象的数据类型中,数据被保护在抽象数据类型的中,数据被保护在抽象数据类型的内部,其他对象只能通过内部,其他对象只能通过接口接口与数据进行交互。与数据进行交互。私有数据私有数据
10、方法方法 方法方法数据数据对象对象A对象对象B公有数据公有数据接口接口 4.1.4 4.1.4 封装封装n在程序中,用类将在程序中,用类将数据数据和和方法方法封装在封装在类体类体中。中。模块之间通过模块之间通过接口接口进行交互。进行交互。n封装技术的优点封装技术的优点:(1)(1)降低问题的复杂度;降低问题的复杂度;(2)(2)提高了类或模块的可重用性;提高了类或模块的可重用性;(3)(3)保护数据的完整性和安全性。保护数据的完整性和安全性。类比:计算机的主机类比:计算机的主机 4.2 4.2 类的编程实现类的编程实现 n为什么使用类为什么使用类 采用基本数据类型表示现实世界中的概念存在采用基
11、本数据类型表示现实世界中的概念存在一些局限性。例如:采用一些局限性。例如:采用intint型数据表示一个日期概型数据表示一个日期概念,需要使用念,需要使用3 3个变量:个变量:intint day day,monthmonth,year;year;如如果要表示果要表示2 2个人的生日,就要使用个人的生日,就要使用6 6个变量。个变量。而使用类就可以避免这种情况,因为类中不但而使用类就可以避免这种情况,因为类中不但有变量,还有与之相关的操作所定义的方法,将变有变量,还有与之相关的操作所定义的方法,将变量和方法放在一个类中,外部对类成员的访问都通量和方法放在一个类中,外部对类成员的访问都通过方法进
12、行,从而隐藏成员变量,保护类成员不被过方法进行,从而隐藏成员变量,保护类成员不被非法修改。非法修改。4.2.14.2.1 类定义类定义语法结构:语法结构:修饰符修饰符 class class 类名类名 extends extends 父类名父类名 implements implements 接口名接口名 /类头类头 类成员声明及初始化;类成员声明及初始化;类方法声明及方法体;类方法声明及方法体;n修饰符:说明类的性质,包括访问控制符(空或修饰符:说明类的性质,包括访问控制符(空或publicpublic)和类型说明符和类型说明符(abstractabstract抽象、抽象、finalfinal
13、最终)。最终)。n类名:用户自定,约定每个单词的首字母大写。类名:用户自定,约定每个单词的首字母大写。nextends extends 父类名:实现继承父类名:实现继承/派生派生nimplements implements 接口名:多重继承接口名:多重继承类体类体二者不能同时二者不能同时修饰一个类修饰一个类 4.2.14.2.1 类定义类定义n类类声明只是创建一个模板(或类型描述),并不会创声明只是创建一个模板(或类型描述),并不会创建一个实际的对象,只有用建一个实际的对象,只有用newnew方法创建一个该类的实方法创建一个该类的实例对象时,才具有例对象时,才具有“物理物理”的真实性。的真实性
14、。例例 BoxDemo.javaBoxDemo.java的源程序的源程序 4.2.2 4.2.2 域域/成员变量的定义成员变量的定义 1 1、什么是域、什么是域 域:类体中数据部分体现为域:类体中数据部分体现为成员变量成员变量的定义,也称为的定义,也称为域域或或 静态静态属性属性。域体现了类的状态,状态的改变由类体中。域体现了类的状态,状态的改变由类体中 的方法实现。的方法实现。注注:域必须在类体中直接定义,不能包含在方法中定义。:域必须在类体中直接定义,不能包含在方法中定义。2 2、域定义的语法、域定义的语法 修饰符修饰符 变量类型变量类型 变量名变量名 =变量初始值变量初始值 /简单变量简
15、单变量 修饰符修饰符 类名类名 对象名对象名 =new=new 类名类名 (实际参数列表实际参数列表)/对象对象 4.2.2 4.2.2 域域/成员变量的定义成员变量的定义 3 3、说明、说明n修饰符:包括访问控制符(空、修饰符:包括访问控制符(空、publicpublic、privateprivate、protectedprotected)、)、静态静态staticstatic、常量、常量finalfinal、多线程中备份、多线程中备份volatilevolatile、过渡(暂时)、过渡(暂时)transienttransient修饰符。修饰符。n修饰符为可选项,也可有两个以上的修饰符;修饰
16、符为可选项,也可有两个以上的修饰符;n若使用其他类的对象作为当前类的成员时,须保证其他类在当前若使用其他类的对象作为当前类的成员时,须保证其他类在当前类中是可见的,即它可以被当前类所引用。类中是可见的,即它可以被当前类所引用。n变量类型,可以是基本数据类型,也可以是复合数据类型。变量类型,可以是基本数据类型,也可以是复合数据类型。4.2.2 4.2.2 域域/成员变量的定义成员变量的定义n成员变量与局部变量成员变量与局部变量 成员变量:类体中定义的变量,在整个类中都可成员变量:类体中定义的变量,在整个类中都可 以使用;以使用;局部变量局部变量:在方法体中定义的变量和方法的参在方法体中定义的变量
17、和方法的参 数,在方法中有效。数,在方法中有效。例例4-1 4-1 Person.javaPerson.java的源代码的源代码 class Person String name;/域的定义 int sex;private double salary;int age;Box mybox;1 1、什么是方法、什么是方法n方法,也叫成员函数,是类的动态属性,表示类具有的功能和行为,方法,也叫成员函数,是类的动态属性,表示类具有的功能和行为,用来改变对象的状态。其他对象通过调用对象的方法获得该对象的用来改变对象的状态。其他对象通过调用对象的方法获得该对象的服务。服务。n方法只能在类的内部进行定义。按
18、照习惯方法的定义一般在域之后。方法只能在类的内部进行定义。按照习惯方法的定义一般在域之后。n方法决定该类中的数据如何使用。方法决定该类中的数据如何使用。2 2、方法定义的语法:、方法定义的语法:修饰符修饰符 返回值类型返回值类型 方法名方法名 (参数列表参数列表)/方法头方法头 局部变量声明;局部变量声明;语句序列;语句序列;/方法体方法体4.2.3 4.2.3 方法的定义方法的定义 4.2.3 4.2.3 方法的定义方法的定义 3 3、说明、说明n修饰符:包含访问控制符(空、修饰符:包含访问控制符(空、publicpublic、privateprivate、protectedprotecte
19、d)、)、静态静态staticstatic、抽象抽象abstractabstract、最终最终finalfinal、同步同步synchronizedsynchronized;n返回值的类型任意,无返回值用返回值的类型任意,无返回值用voidvoid,有则在方法体中使用有则在方法体中使用returnreturn语句;语句;n参数可有(指明类型和名称)可无,其类型任意,必须用(),参数可有(指明类型和名称)可无,其类型任意,必须用(),多个用多个用“,”分开;分开;n方法的作用:方法的作用:围绕类的成员进行各种操作;与其他的类或对象进行数据交流、围绕类的成员进行各种操作;与其他的类或对象进行数据交
20、流、消息传递等操作。消息传递等操作。例例4-2 4-2 Person.javaPerson.java的源代码的源代码class Personclass Person String name;/String name;/域的定义域的定义 int sex;int sex;private double salary;private double salary;intint age;age;String String getNamegetName()()return name;return name;void void setNamesetName(String s)(String s)nemenem
21、e=s;=s;double double getIncomegetIncome()()return salary;return salary;void void setIncomesetIncome(double d)(double d)salary=d;salary=d;在在JavaJava中对方法进中对方法进行定义时,根据方行定义时,根据方法的功能需求,要法的功能需求,要对返回值类型、参对返回值类型、参数表和方法体进行数表和方法体进行具体实现。具体实现。4.2.3 4.2.3 方法的定义方法的定义 4 4、方法的返回值、方法的返回值 JavaJava中定义方法必须说明中定义方法必须说明返回
22、值的类型返回值的类型:n没有返回值,那么在方法名前必须加没有返回值,那么在方法名前必须加voidvoid;n有返回值,方法本身也可当作一个值或表达式,可以有返回值,方法本身也可当作一个值或表达式,可以将它赋值给一个将它赋值给一个同类型同类型的变量,方法中有的变量,方法中有returnreturn语句。语句。注:注:returnreturn语句后面的表达式为返回值,且语句后面的表达式为返回值,且returnreturn语句语句 必须为方法的最后一条可执行语句。必须为方法的最后一条可执行语句。例例4-3 4-3 ReturnType.javaReturnType.java的源代码的源代码publi
23、c class public class ReturnTypeReturnType int int i,ji,j;intint mxmx()()i+;i+;j=i+;/j=i+;/return(jreturn(j*i);*i);System.out.printlnSystem.out.println(”i=”+(”i=”+i+”,ji+”,j=”+j);=”+j);return(jreturn(j*i);*i);/return /return 必须为最后一句可执行语句必须为最后一句可执行语句 voidvoid mp()mp()i=j=6;i=j=6;System.out.printlnSyst
24、em.out.println(”i=”+(”i=”+i+”,ji+”,j=”+j);=”+j);public static void main(String args)public static void main(String args)intint x;x;ReturnTypeReturnType r=new r=new ReturnTypeReturnType();();r.mpr.mp();();x=x=r.mxr.mx();();System.out.println(”xSystem.out.println(”x=”+x);=”+x);4.2.3 4.2.3 方法的定义方法的定义 5
25、 5、方法的参数、方法的参数-从外部传递信息从外部传递信息n编写方法时,需要确定参数的编写方法时,需要确定参数的数量数量和和类型类型,多个参数,多个参数用用“,”分开,在方法头定义中说明。分开,在方法头定义中说明。例例 double double computeArea(doublecomputeArea(double x,doublex,double y)y)double s;double s;s=x*y;s=x*y;return s;return s;4.2.3 4.2.3 方法的定义方法的定义n若方法的参数名与类中成员变量若方法的参数名与类中成员变量名相同名相同,则参数名将,则参数名将在
26、方法体内在方法体内隐藏隐藏同名的成员变量。同名的成员变量。n若在方法中想使用与方法变量同名的成员变量,可使若在方法中想使用与方法变量同名的成员变量,可使用关键字用关键字thisthis(指当前的对象)(指当前的对象)实现实现,this.,this.同名的变同名的变量名。量名。n复习复习-形式参数与实际参数,值传递与地址传递。形式参数与实际参数,值传递与地址传递。主调方法实际参数被调方法形式参数a=1b4=2x=1c4=2调用后给形参调用后给形参分配空间,实分配空间,实参、形参不同参、形参不同空间。调用结空间。调用结束形参释放空束形参释放空间,实参之不间,实参之不变变-值传递值传递将首地址将首地
27、址传递给形传递给形参,共用参,共用一个空间,一个空间,实参值变实参值变-地址地址传递传递例例4-4 4-4 Rectangle.javaRectangle.java public class Rectanglepublic class Rectangle double x=2;double y=3;double x=2;double y=3;double double computeArea(doublex,doublecomputeArea(doublex,double y)y)double s;double s;s=s=x*yx*y;/;/此处的此处的x x,y y是类的域吗?是类的域吗?
28、/s=/s=this.xthis.x*this.ythis.y;return s;return s;public static void main(String args)public static void main(String args)Rectangle r=new Rectangle();Rectangle r=new Rectangle();System.out.pringtln(“TheSystem.out.pringtln(“The area area is”+ris”+puteArea(10,10);.computeArea(10,10);例例4-4 Rectangle.ja
29、va4-4 Rectangle.java的的运行结果运行结果 4.2.3 4.2.3 方法的定义方法的定义 6 6、方法体中的变量、方法体中的变量 方法体中对数据变量进行处理,这些变量可以是方法体中对数据变量进行处理,这些变量可以是 成员变量成员变量 方法调用传递的方法调用传递的参数值参数值 方法内定义的方法内定义的局部变量局部变量n局部变量:局部变量:在方法体中定义的变量,只能在定义它的在方法体中定义的变量,只能在定义它的方法内部使用,方法内部使用,使用前必须进行初始化。使用前必须进行初始化。(无构造方(无构造方法)法)n成员变量:可以被类中的所有方法访问。成员变量:可以被类中的所有方法访问
30、。注:二者的作用域不同。注:二者的作用域不同。例例4-5 4-5 LocalVariable.javaLocalVariable.java源程序源程序public class public class LocalVariableLocalVariable int int i=2i=2;/;/非静态域非静态域 void void mvmv()()intint x=7,y=8;x=7,y=8;int s;/int s;/局部变量的作用域局部变量的作用域 s=x*y;s=x*y;System.out.println(”xSystem.out.println(”x=”+x+”=”+x+”,y”+y+”
31、,sy”+y+”,s=”+s);=”+s);System.out.println(”iSystem.out.println(”i=”+i);=”+i);public public staticstatic void main(String args)void main(String args)LocalVariableLocalVariable r=new r=new LocalVariableLocalVariable();();r.mvr.mv();();System.out.pringtln(“TheSystem.out.pringtln(“The variable i=”+variab
32、le i=”+r.ir.i););/System.out.pringtln(“TheSystem.out.pringtln(“The variable x=”+x);variable x=”+x);静态方法内只静态方法内只能直接调用静态能直接调用静态域。域。非静态域属于非静态域属于对象,只有实例对象,只有实例化对象后,才分化对象后,才分配空间,所以在配空间,所以在静态方法内必须静态方法内必须通过对象来调用通过对象来调用非静态变量。非静态变量。LocalVariable.javaLocalVariable.java的运行结果的运行结果例例4-6 Scope1.java4-6 Scope1.jav
33、apublic class Scope1public class Scope1int i=1;int i=1;/非静态成员变量非静态成员变量void void funcfunc()/()/非静态成员方法非静态成员方法 System.out.System.out.printlnprintln(output i member in class in (output i member in class in funcfunc=+i);=+i);int i=2;int i=2;System.out.System.out.printlnprintln(i in (i in funcfunc=+i);=+
34、i);public static void main(String args)public static void main(String args)intint i=3;i=3;System.out.System.out.printlnprintln(i in main=+i);(i in main=+i);Scope1 s1=new Scope1();Scope1 s1=new Scope1();Scope1 s2=new Scope1();Scope1 s2=new Scope1();System.out.System.out.printlnprintln(output i member
35、 of class in main=+s1.i);(output i member of class in main=+s1.i);s1.func();s1.func();s2.i=4;s2.i=4;System.out.System.out.printlnprintln(output i member of class in main (output i member of class in main again=+s2.i);again=+s2.i);s2.func();s2.func();/System.out./System.out.printlnprintln(i in main=+
36、i);(i in main=+i);s1i ifuncfunc()()s2i ifuncfunc()()注:注:s2.i=4;s2.i=4;已经改变了已经改变了i i的值的值,i,i只有在实例化对象中才分配内存空间。只有在实例化对象中才分配内存空间。4.2.3 4.2.3 方法的定义方法的定义n当方法中局部变量当方法中局部变量/参数与类的成员变量同名时参数与类的成员变量同名时,方法方法内使用的是局部变量内使用的是局部变量/参数,即局部变量参数,即局部变量/参数将隐藏参数将隐藏同名的全局同名的全局/成员变量,如果想使用成员变量,使用成员变量,如果想使用成员变量,使用thisthis。类比:图书馆
37、的书(成员变量)和自己的书(局部变类比:图书馆的书(成员变量)和自己的书(局部变 量)。量)。例例4-7 4-7 EqualVarible.javaEqualVarible.java的源程序的源程序public class EqualVarible int i=2;void mv()int i=6;System.out.println(i=+i);/System.out.println(this.i=+this.i);public static void main(String args)EqualVarible r=new EqualVarible();r.mv();4.2.4 main()
38、4.2.4 main()方法方法nmain()main()方法是方法是Java ApplicationJava Application程序特有的方法,表示程序特有的方法,表示JavaJava程序的入口。程序的入口。n语法:语法:public staticpublic static void main(String args)void main(String args)方法体方法体 其中局部变量使用前必须显示赋值,否则出错。其中局部变量使用前必须显示赋值,否则出错。nJava ApplicationJava Application程序中程序中有且只有有且只有一个类包含一个类包含main()mai
39、n()方法。方法。n在运行程序时,输入的类名必须与在运行程序时,输入的类名必须与main()main()方法所在的类名相方法所在的类名相同。同。nmain()main()是是JavaJava中唯一能直接与用户交换信息的方法,其他方中唯一能直接与用户交换信息的方法,其他方法通过所在类才能够被访问。法通过所在类才能够被访问。n命令行参数:命令行参数:main()main()方法可以有零个或多个参数,参数是字方法可以有零个或多个参数,参数是字符串类型,依次放入符串类型,依次放入argsargs数组的各个元素中,供方法使用。数组的各个元素中,供方法使用。命令行参数命令行参数n有时你想在运行程序时将信息
40、传递到一个程序中。这有时你想在运行程序时将信息传递到一个程序中。这通过将命令行参数(通过将命令行参数(command-line arguments command-line arguments)传递传递给给main()main()来实现。来实现。n命令行参数是命令行参数是程序执行程序执行时在命令行中紧跟在时在命令行中紧跟在程序名程序名后后的信息。运行时的信息。运行时java CommHandle java CommHandle very goodvery goodn在在Java Java 程序中访问命令行参数是相当容易的程序中访问命令行参数是相当容易的它们它们作为字符串存储在传递给作为字符串存
41、储在传递给main()main()的的String String 数组中。数组中。例如例如,下面的程序显示了调用的命令行参数:下面的程序显示了调用的命令行参数:命令命令行参行参数数 命令行参数程序举例命令行参数程序举例 class class CommandLineCommandLine public static void main(String args)public static void main(String args)for(int i=0;i for(int i=0;i0)0)System.out.println(the number of arguments System.ou
42、t.println(the number of arguments is+args.lengthis+args.length););for(i=0;i for(i=0;iargs.length;iargs.length;i+)+)System.out.println(args+iSystem.out.println(args+i+=+=+argsiargsi););else else System.out.println(noSystem.out.println(no arguments!);arguments!);4.3 4.3 对象的定义与使用对象的定义与使用n创建对象创建对象n使用对象使
43、用对象n释放对象释放对象/对象的消失对象的消失垃圾回收机制垃圾回收机制JavaJava语言中,使用对象语言中,使用对象“三步曲三步曲”:类和对象之间的区别:类和对象之间的区别:类创建一种新的数据类型,该种类型能被用来创建对象。也就是,类创建一种新的数据类型,该种类型能被用来创建对象。也就是,类创建了一个逻辑的框架,该框架定义了它的成员之间的关系。当你类创建了一个逻辑的框架,该框架定义了它的成员之间的关系。当你声明类的对象时,你正在创造该类的实例。因此,类是一个逻辑构造,声明类的对象时,你正在创造该类的实例。因此,类是一个逻辑构造,对象有物理的真实性(也就是对象占用内存空间)。对象有物理的真实性
44、(也就是对象占用内存空间)。4.3.1 4.3.1 对象的创建对象的创建 对象的创建需要两个步骤:声明对象与实例化对象。格式为:对象的创建需要两个步骤:声明对象与实例化对象。格式为:n类名类名 对象名对象名;/声明对象声明对象,创建引用,创建引用对象名对象名=newnew 类名(类名(参数列表参数列表);/实例化实例化,分配内存,初始化,分配内存,初始化如:如:Mankind Mankind s somePersonomePerson;somePersonsomePerson=new Mankind=new Mankind()();n类名类名 对象名对象名 =new=new 类名(类名(参数列
45、表参数列表);/;/可将声明和实例化共同进行可将声明和实例化共同进行如:如:Mankind Mankind somePersonsomePerson=new Mankind=new Mankind()();以上两种格式等价。以上两种格式等价。注:注:对象名首字母要小写。对象名首字母要小写。构造构造方法方法somePersonsomePersoni ifuncfunc()()null 4.3.1 4.3.1 对象的创建对象的创建 对象创建的过程:对象创建的过程:n为对象开辟空间,并对对象的为对象开辟空间,并对对象的成员变量成员变量进行缺省的初进行缺省的初始化;(局部变量必须自行初始化)始化;(局
46、部变量必须自行初始化)n对成员变量进行指定的初始化;对成员变量进行指定的初始化;n调用相应的构造方法。调用相应的构造方法。newnew作用:作用:n为对象向系统申请内存;为对象向系统申请内存;n调用类的构造方法,为对象进行初始化。调用类的构造方法,为对象进行初始化。4.3.2 4.3.2 构造方法构造方法1、构造方法:是类的一种特殊的方法,其作用是在创建、构造方法:是类的一种特殊的方法,其作用是在创建 类对象同时,类对象同时,初始化类的实例对象初始化类的实例对象(成员变量成员变量)。2、定义构造方法,可在类中显示定义,否则系统调用、定义构造方法,可在类中显示定义,否则系统调用默默 认的构造方法
47、认的构造方法,每个类都有自己的构造方法。,每个类都有自己的构造方法。3、构造方法的特性构造方法的特性:n构造方法的方法名必须与类名相同;构造方法的方法名必须与类名相同;n构造方法没有返回值,不用构造方法没有返回值,不用voidvoid声明;声明;n用户不能直接调用构造方法;用户不能直接调用构造方法;注:注:构造方法只能由构造方法只能由newnew运算符调用运算符调用。n构造方法在用户创建对象时,系统自动调用执行。构造方法在用户创建对象时,系统自动调用执行。n不能在方法内部用不能在方法内部用return语句返回一个值。语句返回一个值。成员变成员变量不用量不用初始化初始化的原因的原因 4.3.2
48、4.3.2 构造方法构造方法 4 4、构造方法的语法、构造方法的语法 修饰符修饰符 方法名(方法名(参数列表参数列表)方法体方法体 n修饰符只能是修饰符只能是访问控制修饰符访问控制修饰符,即,即public,protectedpublic,protected和和privateprivate其其中之一。中之一。n构造方法的重载构造方法的重载:一个类中可以定义多个同名的构造方法,但是:一个类中可以定义多个同名的构造方法,但是它们必须拥有不同的参数。它们必须拥有不同的参数。例:例:class class PointPoint int x,y;int x,y;Point()Point()x=0;y=0
49、;x=0;y=0;Point(int Point(int x,intx,int y)y)this.x=x;this.y=y;this.x=x;this.y=y;根据参数的数量、根据参数的数量、类型的不同,调类型的不同,调用不同的构造方用不同的构造方法法 n构造方法与初始化方法相比的好处构造方法与初始化方法相比的好处 当用当用newnew为一个对象分配内存时为一个对象分配内存时,要调用对象的构造方法要调用对象的构造方法,而当创而当创建一个对象时建一个对象时 ,必须用必须用newnew为它分配内存。因此用构造方法进行初为它分配内存。因此用构造方法进行初始化避免了在生成对象后每次都要调用对象的始化避
50、免了在生成对象后每次都要调用对象的初始化初始化方法。方法。nnewnew运算符返回对一个对象的引用运算符返回对一个对象的引用,但与但与C C、C+C+中的指针不同中的指针不同 对象的引用是指向一个中间的数据结构对象的引用是指向一个中间的数据结构,它存储有关数据类型的它存储有关数据类型的信息以及当前对象所在的地址信息以及当前对象所在的地址,而对于对象所在的实际内存地址是而对于对象所在的实际内存地址是不可操作的不可操作的,这就保证了安全性。这就保证了安全性。n构造方法中可以定义参数,方法中定义了多少参数,在进行对象构造方法中可以定义参数,方法中定义了多少参数,在进行对象创建时,需要按顺序提供相同数