第五章类的定义.ppt
《第五章类的定义.ppt》由会员分享,可在线阅读,更多相关《第五章类的定义.ppt(66页珍藏版)》请在三一文库上搜索。
1、第五章 类的定义,1,教学内容,2,教学内容,递归,5.8,3,教学重点,了解面向对象思想,掌握对象和类的基本概念、明确Java中的类的定义方法、构造方法、方法重载和this的使用。 掌握对象的使用方法,明确封装的作用与方法。 了解继承的基本概念,明确方法重写的作用,要注意与重载的区别,掌握super关键字的使用、继承中的构造方法调用;了解Finalizer。 掌握多态性的基本概念、明确多态实现的条件,熟练掌握多态性的代码实现,4,类的定义: 类是一类对象的抽象或原形,它定义了该类对象的共同的状态和方法。 用户可以使用类的定义来生成该类的对象,生成的对象将可以使用该类的所以组件。 类中包含两种
2、内容: (1)成员(field)域:是存储数据项的变量。成员域也称类的数据成员(data member)。 (2)方法(method):定义了用户可以进行的操作,也决定了利用类的对象可以做的事情。,5.1 什么是类,5,例1. 定义了一个名为SimplePoint 的类 public class SimplePoint public int x = 0; /x为成员变量 public int y = 0; /y为成员变量 ,5.1 什么是类,6,5.1 什么是类,当创建一个新的对象时(对该类实例化), 就会为该对象及其成员分配空间,同时对成员变量进行初始化。,7,例2 定义一个名为Simple
3、Rectangle类 public class SimpleRectangle public int width = 0; public int height = 0; public SimplePoint origin = new SimplePoint(); ,5.1 什么是类,8,5.1 什么是类,9,5.1 什么是类,例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 = y; ,new Point
4、(44, 78),10,类变量(class variable):也称为静态成员变量(static field)。 在声明时使用关键字static。 只与类有关,被该类的所有对象共享。 未创建该类的对象时,这些变量仍然存在。 实例变量(instance varible):也称为非静态成员变量(non-static field)。 该类型变量与类的每个实例有关。 该类的每个实例都有他自己的变量的副本和赋值。,5.1.1 类定义中的变量,11,类Sphere的定义,public class Sphere /class variable static double PI=3.14; /instance
5、 variable double xCenter; double yCenter; double zCenter; double radius; ,3.14,Sphere.PI由所有对象共享,globe xCenter yCenter zCenter radius,ball xCenter yCenter zCenter radius,12,方法的定义:提供了使用类定义中指定的变量进行的操作。 方法的分类: 实例方法(instance method):只可以在特定的对象中执行。 类方法(class method):使用static进行声明,即使该类没有对象存在也可以执行。 注意:类方法不能引用
6、实例变量。,5.1.2 类定义中的方法,13,访问静态成员或静态方法: 类名.成员名 类名.方法名 例如: double rootPi = Math.sqrt ( Math. PI ); 实例变量和实例方法只能通过对象的引用来调用,因为在定义中已经和一个特定的对象相关。 例如:若有对象ball存在,则: double ballVolume = ball.volume();,5.1.3 变量和方法的访问,14,定义类: class 类名 类的详细定义; ,5.2 定义类,例如: class Sphere static final double PI=3.14; static int count=
7、0; double radius; double xCenter; double yCenter; double zCenter; ,15,方法概念: 是一个自包含的代码块 有自己的名称及可以重复使用的属性 可以根据需要在程序多个不同的地方被执行 可以使用其名字来调用方法 方法可以指定返回值的类型,若没有返回值,则应声明方法的返回对象类型为void,5.3 方法的定义,16,方法的基本结构如下: return_type methodName(arg1,arg2,argn) statement; 方法的形式参数出现在方法名后的大括号中,指定了在方法调用时需要向其传递的信息。 当用户调用方法时提供
8、给形参的值称为实参。 注意:方法也可以没有参数。,5.3 方法的定义,17,有返回值:return return_value; 无返回值:return 或 不写 注意:如果方法有返回值,则返回值的类型要与声明方法时定义的返回值类型保持一致。,5.3.1 由方法返回,18,形参:定义了当调用该方法时传递给该方法的类型及其值,包括参数类型和参数名,并出现在方法定义的形参列表中。 实参:定义了执行方法时传递给形参的值,而且实参的值通过执行该方法时的形参名来引用。 注意: (1)实参值的类型一定要和定义方法时对应的形参类型保持一致。 (2)对于非类对象的数据,实参到形参的数据采用值传递的方法。,5.3
9、.2 形式参数表,示例程序: VariableDemo,19,final形参 意义:如果将方法中的形参声明为final,可以防止再调用该方法时,实参的值被修改。 说明:final形参对于值传递的方式没有意义,而对于引用类对象的形参有意义,这样做可以防止对实参对象的误操作。,5.3.2 形式参数表,20,定义类方法:在定义的方法前面加关键字static。 例: class Sphere static int getCount() return count; 注意:这样的方法不能直接引用任何实例变量。因为不存在任何类对象静态方法也能被执行。,5.3.3 类方法的定义,21,实例方法可以访问类的任何
10、数据成员,直接使用即可。 class Sphere static final double PI=3.14; static int count=0; double radius; double xCenter; double yCenter; double zCenter; static int getCount() return count; double volume() return 4.0/3.0*PI*radius*radius*radius; ,5.3.4 在方法中访问类的数据成员,22,每个实例方法都有一个名为this的变量,它引用调用该方法的当前对象,即当一个方法引用类的一个实
11、例变量时,由编译器默认使用。 例如,类中有实例变量value、a、b,则如下两条语句等价。 value = a+b; this.value = this.a+this.b;,5.3.5 this变量,23,this是Java的一个关键字,表示某个对象。 this可以出现在实例方法和构造方法中,但不可以出现在类方法中。 this关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。 this关键字出现在类的实例方法中时,代表正在调用该方法的当前对象。,5.3.5 this变量,24,class Sphere static final double PI = 3.14; / 初始化静态成员
12、 double radius = 5.0; /初始化非静态成员 double xCenter = 10.0; /初始化非静态成员 ,5.3.6 初始化数据成员,25,初始化块: 指位于括号中的一个代码块,它在类的对象生成之前执行 初始化块的分类: 1、静态初始化块:使用static定义的代码块,当类装载到系统时将执行一次。静态初始化块只能初始化类的静态数据成员。 2、非静态初始化块:对每个要生成的对象执行一次,可以初始化类的实例变量。 程序见:TryInitialization.java,5.3.6 初始化数据成员,26,构造函数:函数名与类名相同,且不指定返回对象类型,可以有参数,也可以无参
13、数,一个类中可以有多个构造函数。 构造函数功能:在对象实例化时,系统首先调用构造函数,对生成的对象的实例变量进行初始化,其由系统默认调用。 注意:如果类中没有显示声明构造函数,则系统会提供一个默认的构造函数,其无参,并且不做任何工作。,5.4 构造函数,27,例如: class Sphere double radius, xCenter, yCenter, zCenter; Sphere(double theRadius, double x, double y, double z) radius = theRadius; xCenter = x; yCenter = y; zCenter =
14、z; ,5.4 构造函数,28,如果没有为类定义任何构造函数,编译器将自动提供一个默认构造函数,但其没有任何参数,也没有任何语句,仅提供一个生成对象的入口。 注意: 如果类中已有构造函数,则系统将不再提供默认构造函数,如果此时需要一个无参构造函数,则需要显示定义一个。,5.4.1 默认构造函数,29,声明类类型变量 Sphere ball; 注意:此时系统没有生成对象,因此也就没有调用构造函数,只是生成了用于存储该对象的引用。 生成类对象 ball = new Sphere(10.0, 1.0, 1.0, 1.0);,5.4.2 生成类的对象,30,将对象传递给方法: 把对象当作实参传递给一个
15、方法的时候,采用引用传递的机制。即实参和形参引用的是同一个对象,没有对实际对象进行复制。 对象的生存期: 对象的生存期由引用它的变量决定,即对象将在引用它的变量的作用域之外消失。 处理消失对象的过程称为垃圾收集。 程序见:CreateSpheres.java 和 Sphere.java,5.4.2 生成类的对象,注意:将两个源程序放在一个目录下,在JDK编译器下,只需编译包含main()定义的文件,就可以编译该程序涉及到的所有源文件。,31,方法重载:在一个类中,用同样的名字定义的多个方法。 重载条件:各重载函数的形参列表必须不相同。 注意: 函数返回值不能作为判断重载的条件。 签名:方法的名
16、称、形参的类型及其顺序统称为签名。 类中的每个方法的签名都必须唯一,编译器将以此判断该调用那一个函数。,5.6 方法重载,32,如果希望通过不同的初始化数据产生产生类的对象,则可以采用重载构造函数的方法。例如: Sphere(double x, double y, double z) xCenter = x; yCenter = y; zCenter = z; radius = 1.0; +count; ,5.6.1 多个构造函数,Sphere() xCenter = 0; yCenter = 0; zCenter = 0; radius = 1.0; +count; ,33,在一个构造函数中
17、调用构造函数: 类的构造函数可以在其第一条可执行语句中调用该类的另一个构造函数,可以省去大量的重复代码。 调用方法:可以使用this作为名称,在其后面的括号中根据需要列出适当的参数。,5.6.1 多个构造函数,34,Sphere() radius = 1.0; +count; Sphere(double x, double y, double z) this(); / 注意在第一句调用 xCenter = x; yCenter = y; zCenter = z; ,5.6.1 多个构造函数,35,Sphere ball = new Sphere(10.0, 10,0, 0.0); Sphere
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五 定义
链接地址:https://www.31doc.com/p-3120693.html