




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章第五章 类的定义类的定义1什么是类什么是类5.1定义类定义类5.2方法的定义方法的定义5.3 构造函数5.4类的定义和运用类的定义和运用5.5 方法重载5.6对象的运用对象的运用5.7递归递归5.8了解包了解包5.9控制对类成员的访问控制对类成员的访问5.10 嵌套类5.11finalize( )finalize( )方法方法5.12本地方法本地方法5.13教学重点教学重点v了解面向对象思想,掌握对象和类的根本概念、了解面向对象思想,掌握对象和类的根本概念、明确明确JavaJava中的类的定义方法、构造方法、方法重中的类的定义方法、构造方法、方法重载和载和thisthis的运用。的运用。
2、 v掌握对象的运用方法,明确封装的作用与方法。掌握对象的运用方法,明确封装的作用与方法。 v了解承继的根本概念,明确方法重写的作用,要了解承继的根本概念,明确方法重写的作用,要留意与重载的区别,掌握留意与重载的区别,掌握supersuper关键字的运用、承关键字的运用、承继中的构造方法调用;了解继中的构造方法调用;了解FinalizerFinalizer。 v掌握多态性的根本概念、明确多态实现的条件,掌握多态性的根本概念、明确多态实现的条件,熟练掌握多态性的代码实现熟练掌握多态性的代码实现 v类的定义:类的定义:v类是一类对象的笼统或原形,它定义了该类对象的类是一类对象的笼统或原形,它定义了该
3、类对象的共同的形状和方法。共同的形状和方法。v用户可以运用类的定义来生成该类的对象,生成的用户可以运用类的定义来生成该类的对象,生成的对象将可以运用该类的所以组件。对象将可以运用该类的所以组件。v类中包含两种内容:类中包含两种内容:v(1)成员成员(field)域:是存储数据项的变量。成员域域:是存储数据项的变量。成员域也称类的数据成员也称类的数据成员data member。v(2)方法方法(method):定义了用户可以进展的操作,:定义了用户可以进展的操作,也决议了利用类的对象可以做的事情。也决议了利用类的对象可以做的事情。v例例1. 定义了一个名为定义了一个名为SimplePoint 的
4、类的类vpublic class SimplePoint v public int x = 0; /x为成员变量为成员变量v public int y = 0; /y为成员变量为成员变量v 当创建一个新的对象时对该类实例化,当创建一个新的对象时对该类实例化, 就会就会为该对象及其成员分配空间,同时对成员变量进展为该对象及其成员分配空间,同时对成员变量进展初始化。初始化。v例例2 2 定义一个名为定义一个名为SimpleRectangleSimpleRectangle类类vpublic class SimpleRectangle public class SimpleRectangle vpub
5、lic int width = 0;public int width = 0;vpublic int height = 0;public int height = 0;vpublic SimplePoint origin = new SimplePoint();public SimplePoint origin = new SimplePoint();v 例例3 public class Point public int x = 0; public int y = 0; / a constructor! public Point(int x, int y) this.x = x; this.y
6、 = y; new Point(44, 78)new Point(44, 78)类类Sphere的定义的定义public class Sphere /class variablestatic double PI=3.14;/instance variabledouble xCenter;double yCenter;double zCenter;double radius;3.14Sphere.PI由一切对象共享由一切对象共享globexCenteryCenterzCenterradiusballxCenteryCenterzCenterradiusv访问静态成员或静态方法:访问静态成员或静态
7、方法:类名类名.成员名成员名类名类名.方法名方法名v例如:例如:v double rootPi = Math.sqrt ( Math. PI );v实例变量和实例方法只能经过对象的援用来调用,实例变量和实例方法只能经过对象的援用来调用,由于在定义中曾经和一个特定的对象相关。由于在定义中曾经和一个特定的对象相关。v例如:假设有对象例如:假设有对象ball存在,那么:存在,那么:v double ballVolume = ball.volume();v 例如:v class Spherev static final double PI=3.14;v static int count=0;v dou
8、ble radius;v double xCenter;v double yCenter;v double zCenter;v v 方法的根本构造如下:方法的根本构造如下:v return_type methodName(arg1,arg2,argn)v vstatement;v v 方法的方式参数出如今方法名后的大括号中,指定了在方法的方式参数出如今方法名后的大括号中,指定了在方法调用时需求向其传送的信息。方法调用时需求向其传送的信息。v 当用户调用方法时提供应形参的值称为实参。当用户调用方法时提供应形参的值称为实参。v 留意:方法也可以没有参数。留意:方法也可以没有参数。v有前往值:有前往
9、值:return return_value;v无前往值:无前往值:return 或或 不写不写v留意:假设方法有前往值,那么前往值的类型要与留意:假设方法有前往值,那么前往值的类型要与声明方法时定义的前往值类型坚持一致。声明方法时定义的前往值类型坚持一致。vfinal形参形参v意义:假设将方法中的形参声明为意义:假设将方法中的形参声明为final,可以防止,可以防止再调用该方法时,实参的值被修正。再调用该方法时,实参的值被修正。v阐明:阐明:final形参对于值传送的方式没有意义,而对形参对于值传送的方式没有意义,而对于援用类对象的形参有意义,这样做可以防止对实于援用类对象的形参有意义,这样做
10、可以防止对实参对象的误操作。参对象的误操作。v 实例方法可以访问类的任何数据成员,直接运用即可。实例方法可以访问类的任何数据成员,直接运用即可。class Spherestatic final double PI=3.14;static int count=0;double radius;double xCenter;double yCenter;double zCenter;v static int getCount() return count; double volume()v return 4.0/3.0*PI*radius*radius*radius; v v每个实例方法都有一个名为
11、每个实例方法都有一个名为this的变量,它援用调的变量,它援用调用该方法的当前对象,即当一个方法援用类的一个用该方法的当前对象,即当一个方法援用类的一个实例变量时,由编译器默许运用。实例变量时,由编译器默许运用。v例如,类中有实例变量例如,类中有实例变量value、a、b,那么如下两,那么如下两条语句等价。条语句等价。v value = a+b;v this.value = this.a+this.b;vthis是是Java的一个关键字,表示某个对象。的一个关键字,表示某个对象。 vthis可以出如今实例方法和构造方法中,但不可以可以出如今实例方法和构造方法中,但不可以出如今类方法中。出如今类
12、方法中。 vthis关键字出如今类的构造方法中时,代表运用该关键字出如今类的构造方法中时,代表运用该构造方法所创建的对象。构造方法所创建的对象。 vthis关键字出如今类的实例方法中时,代表正在调关键字出如今类的实例方法中时,代表正在调用该方法的当前对象。用该方法的当前对象。 class Sphere static final double PI = 3.14; / 初始化静态成员初始化静态成员 double radius = 5.0; /初始化非静态成员初始化非静态成员 double xCenter = 10.0; /初始化非静态成员初始化非静态成员 例如:例如:class Sphere d
13、ouble radius, xCenter, yCenter, zCenter; Sphere(double theRadius, double x, double y, double z) radius = theRadius; xCenter = x; yCenter = y; zCenter = z; v假设没有为类定义任何构造函数,编译器将自动提假设没有为类定义任何构造函数,编译器将自动提供一个默许构造函数,但其没有任何参数,也没有供一个默许构造函数,但其没有任何参数,也没有任何语句,仅提供一个生成对象的入口。任何语句,仅提供一个生成对象的入口。v留意留意: 假设类中已有构造函数,那么
14、系统将不再提假设类中已有构造函数,那么系统将不再提供默许构造函数,假设此时需求一个无参构造函数,供默许构造函数,假设此时需求一个无参构造函数,那么需求显示定义一个。那么需求显示定义一个。留意:将两个源程序放在一个目录下,在留意:将两个源程序放在一个目录下,在JDKJDK编译器下,只需编译包含编译器下,只需编译包含main()main()定义的文件,定义的文件,就可以编译该程序涉及到的一切源文件。就可以编译该程序涉及到的一切源文件。v 假设希望经过不同的初始化数据产消费生类的对象,假设希望经过不同的初始化数据产消费生类的对象,那么可以采用重载构造函数的方法。例如:那么可以采用重载构造函数的方法。
15、例如:v Sphere(double x, double y, double z)v xCenter = x;v yCenter = y;v zCenter = z;v radius = 1.0;v +count;v Sphere() xCenter = 0; yCenter = 0; zCenter = 0; radius = 1.0; +count;v在一个构造函数中调用构造函数在一个构造函数中调用构造函数: 类的构造函数类的构造函数可以在其第一条可执行语句中调用该类的另一个可以在其第一条可执行语句中调用该类的另一个构造函数,可以省去大量的反复代码。构造函数,可以省去大量的反复代码。v调用
16、方法:可以运用调用方法:可以运用this作为称号,在其后面作为称号,在其后面的括号中根据需求列出适当的参数。的括号中根据需求列出适当的参数。Sphere() radius = 1.0; +count;Sphere(double x, double y, double z) this(); / 留意在第一句调用留意在第一句调用 xCenter = x; yCenter = y; zCenter = z; Sphere ball = new Sphere(10.0, 10,0, 0.0); Sphere newBall = ball;那么那么newBall将援用与将援用与ball一样的对象,而没有
17、一样的对象,而没有生成新对象,在修正这个对象时,生成新对象,在修正这个对象时,ball和和newBall都发生变化。都发生变化。可以采用复制构造函数的方法,将原对象作为参数,可以采用复制构造函数的方法,将原对象作为参数,经过复制对象中的实例变量,来生成新的对象。经过复制对象中的实例变量,来生成新的对象。例如:例如:Sphere(final Sphere oldSphere) radius = oldSphere.radius; xCenter= oldSphere.xCenter; yCenter = oldSphere.yCenter; zCenter = oldSphere.zCenter
18、; +count; Sphere ball = new Sphere(10.0, 10,0, 0.0);Sphere newBall = new Sphere(ball);v本例作为上机练习题,让学生本人调试本例作为上机练习题,让学生本人调试v递归:一个方法调用本人的过程被称为递归。递归:一个方法调用本人的过程被称为递归。v递归分类:递归分类:v直接递归直接递归v间接递归间接递归v例题:编写一个方法计算一个变量的整数幂。例题:编写一个方法计算一个变量的整数幂。v程序见:程序见:PowerCalc.javav本例作为上机练习题,又学生本人调试本例作为上机练习题,又学生本人调试import jav
19、a.util.Scanner;public class Digui static long fac(int n) if(n=1) return 1; else return n*fac(n-1); public static void main(String args) int k; long f; Scanner sc=new Scanner(System.in); System.out.println(请输入请输入K的值的值:); k=sc.nextInt(); f=fac(k); System.out.println(f=+f); 递归级别 执行操作 0 fac(5) 1 fac(4)
20、2 fac(3) 3 fac(2) 4 fac(1) 4 前往1 fac(1) 3 前往2 fac(2) 2 前往6 fac(3) 1 前往24 fac(4) 0 前往120 fac(5)v为了便于管理大型软件系统中数目众多的类,处理为了便于管理大型软件系统中数目众多的类,处理类命名冲突的问题,类命名冲突的问题,Java引入了包引入了包package。javalangSystemioStringv 为在包为在包Geometry中包含类中包含类Sphere,文件,文件Sphere.java中应包含如下内容:中应包含如下内容:v package Geometry; / 包语句,需放在第一行包语句,
21、需放在第一行v public class Sphere v 其它类假想象包含在其它类假想象包含在Geometry中,也必需在类定义的开中,也必需在类定义的开场处包含同一条语句,并且一切的类文件都存储在与包名一场处包含同一条语句,并且一切的类文件都存储在与包名一样的目录下。样的目录下。v 留意:假设包中的类想被包外访问,那么类和类中的函数都留意:假设包中的类想被包外访问,那么类和类中的函数都应定义为应定义为public。v如前例,包如前例,包Geometry.Shapes3D中的类中的类Sphere的全名是的全名是Geometry.Shapes3D.Sphere,这样可以很,这样可以很好的防止了
22、类的重名问题。好的防止了类的重名问题。v 假设不运用导入语句,依然可以运用某个类,例假设不运用导入语句,依然可以运用某个类,例如:如:v Geometry.Shapes3D.Sphere ball = Geometry.Shapes3D.Sphere(10.0, 1.0, 1.0, 1.0);v计算圆面积公式:计算圆面积公式:Math.PI*r*r;v 这里的这里的Math.PI即为一静态成员,可以经过从类即为一静态成员,可以经过从类Math中导入中导入PI成员名来删除成员名来删除PI前缀前缀Math,例如:,例如:v import static java.lang.Math.PI;v也可采用
23、也可采用 import static java.lang.Math.* 来来导入该类的一切静态成员,此时即可直接运用导入该类的一切静态成员,此时即可直接运用sqrt(),random()等方法,但这样也添加了名字等方法,但这样也添加了名字冲突的概率。冲突的概率。 一个类的方法和变量根据其设定的访问属性,假一个类的方法和变量根据其设定的访问属性,假设属于同一个包,或其声明为设属于同一个包,或其声明为public,那么可以,那么可以被其它类访问。被其它类访问。属性属性允许的访问允许的访问default(无访问属性)(无访问属性)来自同一包中任何类的方法访问来自同一包中任何类的方法访问public来
24、自任何类的方法的访问来自任何类的方法的访问private只允许来自该类内部的方法访问只允许来自该类内部的方法访问protected来自同一包中任何类以及该类的来自同一包中任何类以及该类的任何地方的任何子类的方法访问任何地方的任何子类的方法访问u指定类成员的访问属性,必需在声明语句的开指定类成员的访问属性,必需在声明语句的开场部分加上相应的关键字。例如:场部分加上相应的关键字。例如:public class Point public Point(double xVal, double yVal)x=xVal; y=yVal; public double getX() return x; /访问器
25、方法访问器方法 public double setX(double inputX) x=inputX; /增变方法增变方法 private double x, y;u普通,一个普通,一个public类的变量应该声明为类的变量应该声明为private,并将其外部调用的方法声明为并将其外部调用的方法声明为public。u留意:留意:u1、假设类中一些成员被设置成、假设类中一些成员被设置成final,其又被类,其又被类外运用,可将其声明为外运用,可将其声明为public。u2、假设成员仅供该类内部运用,应指定为、假设成员仅供该类内部运用,应指定为private。u3、假设某些成员只是一种运用函数和规
26、范数值、假设某些成员只是一种运用函数和规范数值的容器,可将其指定为的容器,可将其指定为public。例如。例如Math中的函中的函数。数。public class Outside public class Inside class Outer private int index = 100; void print() Inner i = new Inner(); i.print(); class Inner void print() System.out.println(index); class Test public static void main(String args) Outer
27、o = new Outer(); o.print(); public class Outer private String myString = outer; private String outerString =outer outer!; void test() System.out.print(test ); System.out.println(myString); new Inner().testInner(); private void test2() System.out.print(test2 ); System.out.println(myString); class Inn
28、er private String myString = inner; private void testInner() System.out.print(testInner ); System.out.println(myString); System.out.println(outerString); test2(); othisimaino.printi.printthis栈内存栈内存堆内存堆内存OuterOuter类对象类对象InnerInner类对象类对象Outer.thisOuter.thisu将嵌套类声明为将嵌套类声明为static就可以生成独立于外部类对就可以生成独立于外部类对
29、象的嵌套类对象,而不用思索能否曾经生成了外部对象的嵌套类对象,而不用思索能否曾经生成了外部对象。象。u留意:留意:u1、静态嵌套类可以有静态成员,而非静态嵌套类、静态嵌套类可以有静态成员,而非静态嵌套类那么不能有静态成员。那么不能有静态成员。u2、静态嵌套类的成员可以访问顶层类的静态成员。、静态嵌套类的成员可以访问顶层类的静态成员。u3、非静态嵌套类可以访问任何顶层类的成员,并、非静态嵌套类可以访问任何顶层类的成员,并且可以访问一样顶层类下的静态嵌套类的静态成员。且可以访问一样顶层类下的静态嵌套类的静态成员。u在方法中定义的内部类,假设要访问方法中定义的在方法中定义的内部类,假设要访问方法中定
30、义的本地变量或方法的参数,那么变量必需被声明本地变量或方法的参数,那么变量必需被声明final。u内部类可以声明为内部类可以声明为private或或protected;还可以声;还可以声明为明为abstract或或final。u内部类可以声明为内部类可以声明为static的,但此时就不能再运用的,但此时就不能再运用外部类的非外部类的非static的成员变量和非的成员变量和非static的成员方法;的成员方法;u非非static的内部类中的成员不能声明为的内部类中的成员不能声明为static的,只的,只需在顶层类或需在顶层类或static的内部类中才可声明的内部类中才可声明static成员。成员
31、。u我们为什么运用内部类我们为什么运用内部类u1、在内部类、在内部类inner class中,可以随意的访问中,可以随意的访问外部类的成员,这可以让我们更好地组织管理我们的外部类的成员,这可以让我们更好地组织管理我们的代码,加强代码的可读性。代码,加强代码的可读性。u2、内部类可以用于创建适配器类,适配器类是用、内部类可以用于创建适配器类,适配器类是用于实现接口的类。运用内部类来实现接口,可以更好于实现接口的类。运用内部类来实现接口,可以更好地定位与接口关联的方法在代码中的位置。地定位与接口关联的方法在代码中的位置。u3、内部类的更多用法。、内部类的更多用法。u该方法会在一个对象最终被销毁并且它占用的内存该方法会在一个对象最终被销毁并且它占用的内存空间被释放之前由空间被释放之前由Java自动调用。自动调用。u其方式如下:其方式如下: protected void finalize() / you clean code ufinalize()的用途:的用途:u 当资源不在当资
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学生毕业论文吐槽
- (2025)保密知识竞赛考试题库及参考答案
- 玉米油提取工艺及其副产品利用
- 风电场自动化系统设计与集成
- 2025教师师德师风承诺书范文
- 税务专业要写毕业论文
- 2024年事业单位联考综合应用能力A类真题与参考答案
- 特种设备(锅炉、压力容器)培训考试试题及答案
- 2024年护理核心制度考试试题及答案
- 摄影测量专业毕业论文
- 舆论学复习测试卷附答案
- 高二年级培优措施及策略
- 2025年中国人寿:养老险上海分公司招聘笔试参考题库含答案解析
- 2025至2031年中国特种工业气体行业投资前景及策略咨询研究报告
- 2025年福建中闽海上风电有限公司招聘笔试参考题库含答案解析
- 合同能源管理
- 中国航空集团有限公司介绍
- 2025年下半年吉林省松原市前郭县事业单位招聘高校毕业生带编入伍19人历年高频重点提升(共500题)附带答案详解
- 地板胶施工方案
- 第二类医疗器械经营范围、经营方式说明
- 《灌区数字孪生平台与-四预-功能建设》
评论
0/150
提交评论