高级编程面向对象高级话题

上传人:宝路 文档编号:52817420 上传时间:2018-08-26 格式:PPT 页数:58 大小:1.37MB
返回 下载 相关 举报
高级编程面向对象高级话题_第1页
第1页 / 共58页
高级编程面向对象高级话题_第2页
第2页 / 共58页
高级编程面向对象高级话题_第3页
第3页 / 共58页
高级编程面向对象高级话题_第4页
第4页 / 共58页
高级编程面向对象高级话题_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《高级编程面向对象高级话题》由会员分享,可在线阅读,更多相关《高级编程面向对象高级话题(58页珍藏版)》请在金锄头文库上搜索。

1、第一周周一内容,面向对象高级主题,本节内容,类的组成 对象,对象相等?(=与equals) 封装、继承和多态 抽象类与接口 面向接口编程 类或对象关系,代码复用 关键字static、final、abstract等 内部类,枚举类,1、类的组成,请举例,如Car类,请尽你的理解给出一个类可以有哪些要素组成,可以将现实生活中的对象经过抽象,映射为程序中的对象。对象在程序中是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(Class)。,1、类的组成,定义类的语法格式: 修饰符 class 类名 .类体 类体可以由多个属性、方法、构造器组成。 注意:类的修饰符可以是public、final 或

2、省略这两个以及abstract。类名只要是合法的标识符. 一个类里可以包含三种最常见的成员:构造器、属性、方法。,1、类的组成,定义属性的语法格式: 修饰符 属性类型 属性名 = 默认值; 修饰符可以是 访问权限:public:可被任何类访问。protected:被类自身,子类及同一包中的类访问。default:也称友好,被类自身和同一包中的类访问。private:只能被类自身访问。 其他:transient声明一个暂时性变量,对象存档时不必保存该变量;final声明一个常量,程序不能改变其值,通常用大写;voltatile用于声明一个共享变量,用于多个并发线程共享;static: 表示类成员

3、。,成员变量和局部变量,成员变量指的是在类范围里定义的变量;局部变量指的是在一个方法内定义的变量。 不管是成员变量还是局部变量都遵守相同的命名规则。 成员变量分为类属性和实例属性.对于类属性无论通过类还是对象来访问都是访问同一个对象,只要一个对象改变了类属性,那么其他对象对应的类属性也改变了.成员变量不用显式初始化,只要定义了一个类属性或实例属性,系统默认进行初始化。,局部变量,局部变量可分为三种: 形参 方法局部变量 代码块局部变量. 与成员变量不同的是除了形参外,其他局部变量都必须显式地初始化, Java 里允许局部变量和成员变量重名。这样局部变量会覆盖成员变量,这时通过this 来调用实

4、例的属性.,成员变量的初始化,当类被加载时,类成员就在内存中分配了一块空间。 当对象被创建时,实例成员就在内存中分配了内存空间。 实例变量与实例共存亡;类变量与类本身共存亡。,局部变量的运行机制,局部变量仅在方法内有效。 当方法执行完成时,局部变量便会自动销毁。,1、类的组成,定义方法的语法格式:修饰符 方法返回值类型 方法名(形参列表) .方法体.方法中的修饰符可以是public ,protected,private,static, final,abstract,其中访问控制符只能出现一个,abstract ,final 只能出现其一. 返回值类型可以是基本类型和引用类型,如果无返回值,要用

5、void 来声明 形参列表,可以由零到多组组成,参数之间用逗号(“,”)隔开. static 是一个特殊的关键字,译为”静态”,所有有static 修饰的叫类属性,类方法,类成员.,1、类的组成,定义方法的语法格式:修饰符 方法返回值类型 方法名(形参列表) .方法体. 方法的调用:,1、类的组成,定义方法的语法格式:修饰符 方法返回值类型 方法名(形参列表) .方法体. 方法的重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可。 如:public class Test public static void main(String args)int isum;

6、 double fsum;isum=add(3,5); isum=add(3,5,6);fsum=add(3.2,6.5); public static int add(int x,int y) reutrn x+y;public static int add(int x,int y,int z) return x+y+z;public static double add(double x,double y) return x+y;,修饰词 访问权限:public:protected:private:default: 其他abstract修饰的为抽象方法,必须被重写,抽象类不一定包含abstr

7、act方法,但如果一个类包含abstract方法,该类必须声明为抽象类;final修饰的方法不能再被类重写;native用于将java代码和其他语言的代码集成起来;synchronized用来控制多个并发线程对共享数据的访问。static:类方法。,不同限定词的访问权限,public类,缺省修饰的类,P41,方法的重载,Java 允许在一个类里定义多个同名方法,只要形参列表不同即可. 所以方法的重载只要满足两个条件(两同一不同):1.同一个类中,方法名相同;2.形参不同。和返回值类型无关.所以在调用这些方法时要传入不同的参数值.,方法的参数传递 基本数据类型的参数传递,方法的参数传递 引用数据

8、类型的参数传递,方法的参数传递-值传递,形参长度可变的方法,如果在定义方法时,在最后一个参数的类型后增加三点,则表明该形参接受多个参数值,多个参数值被当成数组传入. 长度可变的形参只能位于最后一个参数,并一个方法里只能有一个可变长度的参数.,1、类的组成,定义构造器的语法格式: 修饰符 构造器名(形参列表) 修饰符可以是public protected private 构造器必须和类名相同,形参和方法的形参一样.,构造函数的定义与作用,构造器是一种特殊的方法,构造对象并对其初始化。 例:Date类的构造器叫Date new Date()-构造一个新对象,且初始化当前时间. 构造器可以有0个,一

9、个或多个参数 构造器和类有相同的名字 一个类可以有多个构造器 构造器没有返回值 构造器总是和new运算符一起使用. 如果没有声明构造器,则系统默认提供一个无参的构造器;如果自己声明了构造器,系统则不再默认提供。,构造方法的重载,和一般的方法重载一样,重载的构造方法具有不同个数或不同类型的参数,编译器就可以根据这一点判断出用new 关键字产生对象时,该调用哪个构造方法了。产生对象的格式是:new 类名(参数列表) ; 重载构造方法可以完成不同初始化的操作, 如:p3=new Person(“Tom”,18);语句,会做这样几件事:创建指定类的新实例对象,在堆内存中为实例对象分配内存空间,并调用指

10、定类的构造方法,最后将实例对象的首地址赋值给引用变量p3。,构造方法的一些细节,在java每个类里都至少有一个构造方法,如果程序员没有在一个类里定义构造方法,系统会自动为这个类产生一个默认的构造方法,这个默认构造方法没有参数,在其方法体中也没有任何代码,即什么也不做。 由于系统提供的默认构造方法往往不能满足编程者的需求,我们可以自己定义类的构造方法,来满足我们的需要,一旦编程者为该类定义了构造方法,系统就不再提供默认的构造方法了。 声明构造方法,如无特殊需要,应使用public关键字,在我们前面例子中,可以使用private访问修饰符吗?,this是什么?,如果func2方法被调用 ,一定是事

11、先已经有了一个存在的对象,func2被作为那个对象的方法被使用。 在func2内部能引用别的对象 ,同样也能引用func2所属的那个对象。 在func2中,自己所属的那个对象的引用名称是什么呢? this关键字在java程序里的作用和它的词义很接近,它在函数内部就是这个函数所属的对象的引用变量。,this引用句柄的存放位置,每个成员方法内部,都有一个this引用变量,指向调用这个方法的对象,类中的成员方法与this之间的关系如图,this引用句柄的应用,一个类中的成员方法可以直接调用同类中的其他成员,其实我们在一个方法内部使用“this.其他成员”的引用方式和直接使用“其他成员”的效果是一样的

12、,那this还有多大的作用呢?在有些情况下,我们还是非得用this关键字不可的 : 让类的成员变量名和对其进行赋值的成员方法的形参变量同名是必要的,这样的代码谁看了都能明白这两个变量是彼此相关的,老手看到函数的定义,就能揣摩出函数中的代码,大大节省了别人和自己日后阅读程序的时间。 假设我们有一个容器类和一个部件类,在容器类的某个方法中要创建部件类的实例对象,而部件类的构造方法要接收一个代表其所在容器的参数。 构造方法是在产生对象时被java系统自动调用的,我们不能在程序中象调用其他方法一样去调用构造方法。但我们可以在一个构造方法里调用其他重载的构造方法,不是用构造方法名,而是用this(参数列

13、表)的形式,根据其中的参数列表,选择相应的构造方法。,3、对象相等?(=与equals),什么是对象相等? 如何让两辆车相等?,对象的比较,“=”运算符与equals()方法的区别怎样比较两个数组对象的内容是否相等,对象的产生,Person p1 = new Person();执行完后的内存状态,对象的产生,当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的都是变量类型都是引用类型,如上面的Person及前面讲过的数组。,1、对象的生成:包括声明、实例化。 声明: 声明并不为对象分配内存空间,而只是分配一个引用空间;对象的引用类似于指针,是32位的地址空间

14、,它的值指向一个中间的数据结构,它存储有关数据类型的信息以及当前对象所在的堆的地址,而对于对象所在的实际的内存地址是不可操作的,这就保证了安全性。 如:Circle cle;,Circle,实例化: 运算符new为对象分配内存空间,它调用对象的构造方法,返回引用;一个类的不同对象分别占据不同的内存空间。 如:cle=new Circle(); 或cle=new Circle(10,20,5);,0xAB12,Circle,对象的引用,对象实体,Point p1=new Point(12,16); Point p2=new Point(6,18);,0xAB10,p1,0xDD12,p2,p1=

15、p2;,0xDD12,p1,0xDD12,p2,对象的使用,创建新的对象之后,我们就可以使用“ 对象名.对象成员 ”的格式,来访问对象的成员(包括属性和方法) class TestPerson public static void main(String args)Person p1 = new Person();Person p2 =new Person();p1.age = -30;p1.shout();p2.shout(); 程序运行的内存布局如下图,2、对象的使用 通过运算符“.“可以实现对变量的访问和方法的调用。变量和方法可以通过设定访问权限来限制其它对象对它的访问。 调用对象的变量

16、 格式:objectReference.variable objectReference是一个已生成的对象,也可以是能生成对象的表达式 例: p.x= 10; tx=new Point( ).x; 调用对象的方法 格式:objectReference.methodName(paramlist); 例如:p.move(30,20); new Point( ).move(30,20);,对象的生命周期,与基本类型的 生命周期一样,3、对象的清除 当不存在对一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器周期性的自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。 也可以调用System.gc( );进行垃圾回收。,3、封装、继承和多态,请举例说明你的理解,如上述的Car类,请分别说明封装、继承和多态 类的字段有多态吗?,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件

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