Java程序设计——04面向对象的基本概念

上传人:油条 文档编号:26873315 上传时间:2018-01-02 格式:PPT 页数:36 大小:575KB
返回 下载 相关 举报
Java程序设计——04面向对象的基本概念_第1页
第1页 / 共36页
Java程序设计——04面向对象的基本概念_第2页
第2页 / 共36页
Java程序设计——04面向对象的基本概念_第3页
第3页 / 共36页
Java程序设计——04面向对象的基本概念_第4页
第4页 / 共36页
Java程序设计——04面向对象的基本概念_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《Java程序设计——04面向对象的基本概念》由会员分享,可在线阅读,更多相关《Java程序设计——04面向对象的基本概念(36页珍藏版)》请在金锄头文库上搜索。

1、计算机科学与技术学院赵志崑,Java程序设计,面向对象的方法,面向对象的程序设计程序的基本构件是类和对象,不是过程或函数面向对象的分析类和对象是名词,过程是动词面向对象的方法更接近人的思维方式提高软件开发效率面向对象的程序设计只是一个环节分析、设计、编码、维护,Java的面向对象特性,初级特性:基本的概念,即类和对象。中级特性:核心的机制,即封装、继承和多态。高级特性:由初级特性和中级特性引出的一些问题,如构造函数的使用、覆盖的规则、静态变量和函数等。,类和对象,面向对象技术最基本的概念是类和对象:类是一个样板,以操作、表示和算法的形式完整地定义了一组对象的行为。它通常也是面向对象语言中的模块

2、化、封装和数据抽象的基础。对象是类的一个实例,是一个软件单元,它由一组结构化的数据和在其上的一组操作构成。,抽象数据类型,类实际上为实际的物体在计算机中定义了一种抽象数据类型。抽象数据类型是仅由数据类型和可能在这个数据类型上进行的操作定义的。使用者只能通过操作方法来访问其属性,不用知道这个数据类型内部各种操作是如何实现的。,变量、方法和消息,对象的三个基本要素:变量:指对象的数据,用来保存对象的状态,又称为实例字段。方法:指对象的功能单元。消息:软件对象通过相互间传递消息来相互作用和通信。,一个消息由三部分组成:1. 接受消息的对象2. 要完成方法的名字3. 方法需要的参数如myCar.spe

3、edUP();,面向对象的程序设计,所有东西都是对象。 程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。(分而制之)每个对象都有自己的存储空间,可容纳其他对象。(由小到大)每个对象都有一种类型。(举一反三)同一类所有对象都能接收相同的消息。,类,定义类采用下面的语句:class 类名 成员定义说明:类的成员包括变量和函数,而且可以有多个。成员函数可以使用成员变量。成员函数也可以调用其它成员函数。对于成员函数来说,成员变量类似于C+中的全局变量,但其作用范围仅限于类内部。一个类就划定了一个范围,在此范围内有“全局变量”和一些函数。,class Studentlong id; ch

4、ar gender; int classID;void changeClass(int c) classID = c;,类和源代码文件,一个源文件中可以写多个类。和源文件名字相同的类叫作主类,只有主类声明前面可以有public。一个源文件中可以没有主类。将源文件编译后,每个类都会生成一个.class文件。,构造函数,构造函数是类的一个特殊的成员函数,用于初始化对象。函数名和类名相同不需要说明返回值类型(不是void)规则:每个类至少有一个构造函数,一个类可以有多个构造函数。如果没有为类定义构造函数,系统会自动为其定义一个缺省的构造函数,不带参数。一旦为类定义了构造函数,则系统不会再为其定义缺省

5、构造函数。,class Student long id; char gender; int classID; public Student() id = 0;gender = F;classID = 0; public Student(long aID, char aGender, int aClassID) id = aID;gender = aGender;classID = aClassID; ,对象和引用,用类声明的变量不是对象,而是对象引用,简称引用。Student xiaoZhang;/ 声明一个Student类型的引用声明引用并不创建对象,一个引用占4个字节,相当于对象指针创建对

6、象须使用new运算符,格式是:new 类的构造函数;例如:new Student();/ 创建一个Student对象,无参构造函数new Student(1, M, 2);/ 有参数的构造函数让引用指向对象xiaoZhang = new Student();通过引用访问对象,访问对象成员使用“.”运算符xiaoZhang.id = 200328013203194L;xiaoZhang.changeClass(1);,类、对象和引用的声明,声明一个类: class 类名 变量声明,方法声明class Studentlong id;/学号char gender;/性别int classID;/班级

7、号,注意不能用class作属性名void changeClass(int c) /更改班级classID = c;声明一个对象引用:类名 引用名Student xiaoZhang;创建一个对象: new 类构造函数xiaoZhang = new Student(); /如果缺少这一步编译器会报错使用对象:引用名 . 变量名 / 方法名xiaoZhang.id = 200328013203194;,存储器分配,Student xiaoZhang;/声明一个Student对象引用xiaoZhangxiaoZhang = new Student();/创建一个对象先执行 new Student()再

8、执行 xiaoZhang = xiaoZhang xiaoZhangxiaoZhang.id = 200328013203194;/使用对象xiaoZhang,00000000,00000000,对象析构,Java不支持析构函数。因为Java能够自动收集垃圾,所以不需要人工的内存回收。自动收集垃圾:当对象没有用处后,Java会自动的释放其占用的内存。好处:可靠性提高、使内存管理与类接口设计分离,减少了跟踪内存管理错误的时间。代价:对性能的影响、暂停、配置复杂性和不确定的结束。 分代收集:1.2及以后的JDK使用了多种策略混合的垃圾收集方式,称为分代收集,其中根据对象的年龄将堆分为几个部分,不同

9、的代是用不同的收集算法收集的。引用计数:每一个对象都有一个关联的引用计数 对该对象的活跃引用的数量。如果对象的引用计数是零,那么它就是垃圾。跟踪收集器:从根集开始沿着引用跟踪,直到检查了所有可到达的对象。可以在程序注册表中、每一个线程堆栈中的(基于堆栈的)局部变量中以及静态变量中找到根。,参数传递,Java语言在参数传递中只支持值传递方式如果方法的参数是基本数据类型(8个),在方法内改变形参的值不影响方法外的实参的值。如果方法的参数是对象引用,在方法内通过形参改变对象的内容,方法退出后实参指向的对象的内容也改变,因为形参和实参指向的是同一个对象。,void inc(int n) n +;int

10、 x = 5;inc(x);/ x = ?,class Count int n; void inc(Count c) c.n +;Count x = new Count();x.n = 5;inc(x);/ x.n = ?,引用与对象的内存分配,Student xiaoMing = new Student();Student xiaoFang = new Student();xiaoMing.gender = M;xiaoFang.gender = F;说明:结果xiaoMing.gender为M,因为引用xiaoMing和xiaoFang指向不同的对象。( xiaoMing= = xiaoF

11、ang)的结果为false。此时对象相等的判断应该用equals方法。,两个引用指向不同的对象,Student xiaoMing = new Student();Student xiaoFang = xiaoMing;xiaoMing.gender = M;xiaoFang.gender = F;说明:结果xiaoMing.gender为F,因为引用xiaoMing和xiaoFang指向同一个对象。( xiaoMing= = xiaoFang)的结果为true。xiaoMing.equals(xiaoFang)结果也为true。,两个引用指向同一个对象,原始数据类型的内存分配,int xiao

12、Ming = 100;int xiaoFang = xiaoMing;xiaoFang = 200;说明:结果xiaoMing为100,因为原始数据类型不存在指向同一个对象的问题。( xiaoMing= = xiaoFang)的结果为false。,参数传递的例子,方法的参数是引用时,形参是对象引用的复制品,通过形参访问的和实参访问的是同一个对象。方法的参数是基本数据类型时,形参是实参的一个复制品。class Student int javaScore;class JavaClass score(Student aStudent, int aScore) /aStudent为引用型aStuden

13、t.javaScore = aScore;aScore = 100; Student s1 = new Student();JavaClass c1 = new JavaClass();int x = 90;c1.score(s1, x);/ s1.javaScore值为100,x的值还是90。,变量和作用域,局部(local)变量:在一个方法内定义的变量, 也被称作自动(automatic)、临时(temporary)或栈(stack)变量。局部变量只在方法内部起作用。当一个方法被执行时, 局部变量被创建;当一个方法被终止时, 局部变量被清除。局部变量必须使用之前初始化, 否则编译时将出错。

14、方法(包括构造函数)的入口参数是局部变量。实例变量:在方法外而类的内部定义的变量,在使用new Xxxx ()调用构造一个对象时被创建。类的实例变量有默认的初始值,可以不用显式初始化。boolean falseChar u0000(null) float 0.0f double 0.0d byte (byte)0short (short)0int 0 long 0L局部变量可以取消非局部变量的作用方法内声明的局部变量与类变量或实例变量可以重名。此时缺省为局部变量。若要使用类变量或实例变量,应使用this关键字。,变量作用域举例,class Studentlong id;char gender;

15、int classID;void changeClass(int classID)this.classID = classID;int y = 0;for (int x=0; x10; x+) y += x; for (int x=0; x100; x+) y += x; ;,实例变量,局部变量,类的管理,当程序中的类非常多时,特别是由多人合作开发时,如何管理类?需要解决类名冲突的问题。有没有类似的问题?,包,定义:Java允许把多个类收集在一起成为一组,称为包,用来管理类。目的:便于组织类,使自己的类和他人提供的类分离,避免命名冲突,还可以提高编译速度。分级:包可以嵌套,从而分成层次。如java.util,类似于硬盘上的目录组织。一可以使每个包中的类不至于过多,二可以保证类名的唯一性。Java库中的包:标准Java库被分成许多包,并且分层。所有的包都在java和javax包层次中。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号