第2章面向对象编程基础PPT讲稿.ppt
《第2章面向对象编程基础PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第2章面向对象编程基础PPT讲稿.ppt(134页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第2章面向对象编程基础第1页,共134页,编辑于2022年,星期一本章要点本章要点类及对象的概念。类的定义,创建类的实例对象。类的成员定义。类及其成员的访问控制。类及其成员的修饰。类的继承。多态技术。制作用户预定义类包接口的概念和应用。异常处理第2页,共134页,编辑于2022年,星期一21类的定义Java是一种纯面向对象的编程语言,面向对象程序设计的基本思想是将现实世界中的事物抽象为对象,抽象出来的对象被赋给相应的状态和行为,通过对消息的响应完成一定的任务。在现实生活中,任何事物都可以被认为是对象(Object),如:汽车、电视机、时钟、人等。对象都有两个共性:(1)具有一定的状态和特性。如
2、电视机有尺寸、外形、颜色等外部特性。(2)每个对象对应一组特定的操作。如电视机有开、关、选择频道等操作。第3页,共134页,编辑于2022年,星期一 面向对象程序设计方法就是把现实世界中对象的状态和操作抽象为程序设计语言中的对象,达到二者的统一。对同一种对象的所有共性进行抽象,就得到了类的概念。面向对象程序设计中的对象是由描述状态的属性和对这些属性进行维护和操作的一系列方法组成的事务处理单位,类相当于创建对象实例的模板,通过对其实例化得到同一类的不同实例。第4页,共134页,编辑于2022年,星期一2.1.1 类的声明 任何一个Java程序都是由一个个类组成的,编写Java程序的过程就是从现实
3、问题中抽象出Java可实现的类并用合适的语句定义它们的过程,这个定义过程包括对类内各种变量和方法的声明和定义,创建类的对象,也包括类间各种关系和接口的声明和定义。第5页,共134页,编辑于2022年,星期一类声明的格式如下:public|friendlyabstractfinal class 类名 extends 父类名 implements 接口名表 变量声明;方法声明;第6页,共134页,编辑于2022年,星期一包含关键字class的一行称为类头,花括号内的部分称为类体。类声明使用关键词class,后跟类名,类名必须是合法的标识符,在class关键词前面可以使用修饰符。类的修饰符说明了类的
4、属性,主要有访问控制修饰符符、抽象修饰符、最终修饰符等。public|friendly:访问控制修饰符,在类中使用的访问控制修饰符有public或friendly。访问控制修饰符不仅针对于类,类的变量、方法的访问也有该项的限制,后面会专门介绍。第7页,共134页,编辑于2022年,星期一abstract:抽象修饰符,声明该类不能被实例化。即抽象类不能创建类的实例。抽象类中主要包含一些静态属性和抽象方法,可以由非抽象子类继承。final:最终修饰符,声明该类不能被继承,即没有子类。class 类名:关键字class表示类声明,类名必须是合法的标识符。extends父类名:关键词extends声明
5、该类的父类。implements 接口名表:关键词implements声明该类要实现的接口,如果实现多个接口,则各接口之间用逗号分隔。第8页,共134页,编辑于2022年,星期一例2-1:类声明。/程序名:Sample2_1.javaclass PrimitiveDefault /类声明boolean bl;/成员变量声明char ch;byte b;short sh;int i;long l;float f;double d;public class Sample2_1 /类声明public static void main(String args)/应用程序中的 main()方法第9页,共
6、134页,编辑于2022年,星期一PrimitiveDefault pd;/声明对象pdpd=new PrimitiveDefault();/为对象pd分配内存,使用new和类中的构造方法System.out.println(“boolean型变量的缺省值:”+pd.bl);System.out.println(“char型变量的缺省值:”+pd.ch);System.out.println(“byte型变量的缺省值:”+pd.b);System.out.println(“short型变量的缺省值:”+pd.sh);System.out.println(“int型变量的缺省值:”+pd.i);
7、System.out.println(“long型变量的缺省值:”+pd.l);System.out.println(“float型变量的缺省值:”+pd.f);System.out.println(“double型变量的缺省值:”+pd.d);第10页,共134页,编辑于2022年,星期一运行结果如下:boolean型变量的缺省值:falsechar型变量的缺省值:byte型变量的缺省值:0short型变量的缺省值:0int型变量的缺省值:0long型变量的缺省值:0float型变量的缺省值:0.0double型变量的缺省值:0.0第11页,共134页,编辑于2022年,星期一本例中声明了2
8、个类,由public修饰的类名要和文件名相同,类PrimitiveDefalse中声明的8个变量是基本数据类型的变量,Java对基本类型变量的大小事先进行了定义,都赋予了默认值,其大小不随着硬件平台和操作系统的改变而变化,这也正是Java程序具有很强移植能力的原因之一。类Sample2_1中声明的变量pd是引用数据类型的,必须要使用new和构造函数实例化之后才能引用。第12页,共134页,编辑于2022年,星期一2.1.2 类体类头定义了类的性质,类体则定义了类的具体内容,类体中一般包括成员变量的声明和成员方法的定义。类成员变量可以存储反映类属性的数据,而类的成员方法则规定了类的行为,如对类属
9、性数据的某种操作等。第13页,共134页,编辑于2022年,星期一成员变量可以是基本数据类型的,也可以是引用数据类型的。成员变量的作用范围是整个类,即在类的所有方法中都有效,但对其它类是不可见的,在其它类中访问属性成员需要声明来源,具体地,是在程序中使用类名或对象名声明。可以在类体的方法定义中声明和初始化局部变量或对象,这些局部变量只在方法内有意义,在方法外是没有意义的。类体中的一个方法可以调用另一个方法,但Java不允许递归调用,也不允许交叉循环调用,Java也不允许嵌套定义方法。类的成员方法的作用范围也是整个类,即在定义它的类中是可见的,但对其它类是不可见的,在其它类中调用类的方法成员需要
10、声明来源,具体地,是在程序中使用类名或对象名声明。第14页,共134页,编辑于2022年,星期一例2-2类变量和方法声明。/程序名:Sample2_2.javaclass Rectangle /类声明float a,b;/成员变量声明Rectangle(float x,float y)/构造方法a=x;b=y;float area()/成员方法声明 return a*b;public class Sample2_2 /类声明public static void main(String args)/main()方法Rectangle rec;/声明对象recrec=new Rectangle(1
11、0,8);/为对象分配内存,使用new和类中的构造方法第15页,共134页,编辑于2022年,星期一 System.out.println(矩形的长为:+rec.a);/引用类成员变量a System.out.println(矩形的宽为:+rec.b);/引用类成员变量b System.out.println(矩形的面积为:+rec.area();/引用类成员方法area()第16页,共134页,编辑于2022年,星期一运行结果如下:矩形的长为:10.0矩形的宽为:8.0矩形的面积为:80.0第17页,共134页,编辑于2022年,星期一2.1.3 类的构造方法 构造方法用来初始化新创建的对象
12、。类可以包含一个或者多个构造方法,不同的构造方法根据参数的不同来决定要初始化的新对象的状态。所有的Java类都有构造方法,用来对新的对象进行初始化。构造方法与类的名字是相同的,且不声明返回值类型。当一个类有多个构造方法时,所有的构造方法的名字都是相同的,只是所带参数的个数和类型不同而已。编译器会根据参数列表的数目以及类型来区分这些构造方法,所以,当创建对象的时候,要根据它的参数是否与初始化的新对象相匹配来选择构造方法。第18页,共134页,编辑于2022年,星期一例2-3:构造方法。/程序名:Sample2_3.javaclass Circle public Circle()/构造方法(无参数
13、)r=0;public Circle(double R)/构造方法(带参数)r=R;double r;/成员变量声明double area()/成员方法声明 return 3.14*r*r;/计算圆面积 第19页,共134页,编辑于2022年,星期一void setR(double newR)/设置圆半径 r=newR;double getR()/获取圆半径 return r;public class Sample2_3public static void main(String args)Circle c0,c;/引用变量声明c0=new Circle();/用无参数的构造方法创建对象c0c
14、=new Circle(2.0);/用带参数的构造方法创建对象cSystem.out.println(圆1的半径为:+c.getR();System.out.println(圆1的面积为:+c.area();第20页,共134页,编辑于2022年,星期一 c.setR(5.0);System.out.println(圆2的半径为:+c.getR();System.out.println(圆2的面积为:+c.area();System.out.println(圆3的半径为:+c0.getR();System.out.println(圆3的面积为:+c0.area();第21页,共134页,编辑于
15、2022年,星期一运行结果如下:圆1的半径为:2.0圆1的面积为:12.56圆2的半径为:5.0圆2的面积为:78.5圆2的半径为:0.0圆2的面积为:0.0当用无参数的构造方法创建对象时,半径为0,而用带参数的构造方法创建对象时,半径为参数的值2.0。第22页,共134页,编辑于2022年,星期一2.1.4 类的成员变量类的成员变量用于存储反映类属性的数据,和在方法中声明的局部变量是不同的,成员变量的作用域是整个类,而局部变量的作用域只是方法内部。声明成员变量的语法如下:public|protected|privatestaticfinaltransientvolatile 变量类型 变量名
16、=表达式;public|protected|private:访问控制符,在后面的章节中介绍。static:成员控制修饰符,说明该类型的变量为静态变量(或类变量)。静态变量由该类的所有实例对象共享,在编译时,静态变量保存在为类声明的存储单元中,在访问静态变量时无须事先初始化它所在的类。没有用static修饰的变量称为实例变量。第23页,共134页,编辑于2022年,星期一final:常量声明修饰符,用该符号声明后,在程序的运行过程中不能再改变它的值,实际使用中,final常与static结合使用。如:static final int pi=3.14159;transient:存储控制临时变量修饰
17、符,用来声明一个临时变量,在默认情况下,类中所有变量都是对象永久状态的一部分。当对象被存档时,这些变量必须同时被保存,但用transient限定的变量不属于对象的永久状态。如:transient int temp;volatile:异步控制修饰符,表示多个并发线程共享的变量,使各个线程对该变量的访问能保持一致。如:volatile int v;第24页,共134页,编辑于2022年,星期一例2-4:类的成员变量和局部变量。/程序名:Sample2_4.javaclass Variable /类声明 int x=0,y=0,z=0;/类的成员变量 void init(int a,int b)/类
18、的成员方法 x=a;y=b;int z=5;/局部变量 System.out.println(*在init()方法中*);System.out.println(x=+x+y=+y+z=+z);public class Sample2_4 public static void main(String args)Variable v=new Variable();/声明并创建类对象 System.out.println(*在init()方法之前*);System.out.println(x=+v.x+y=+v.y+z=+v.z);v.init(20,30);/调用init()方法 System.o
19、ut.println(*在init()方法之后*);System.out.println(x=+v.x+y=+v.y+z=+v.z);第25页,共134页,编辑于2022年,星期一运行结果如下:*在init()方法之前*x=0 y=0 z=0*在init()方法中*x=20 y=30 z=5*在init()方法之后*x=20 y=30 z=0从运行结果可以看到,方法init()中的局部变量z仅在方法内部有效。第26页,共134页,编辑于2022年,星期一2.1.5 类的成员方法成员方法即类的方法成员,用于实现类的操作功能,是类行为的具体体现。Java中声明方法的语法如下:public|prot
20、ected|privatestaticfinalabstractnativesynchronized 返回值类型 方法名(形式参数表)throws 异常类表局部变量声明;功能语句;第27页,共134页,编辑于2022年,星期一public|protected|private:访问控制符,将在后面介绍。static:说明该方法为静态方法,也称为类方法。静态方法属于类,只要声明了类,就可以直接调用该类的方法。静态方法只能操作静态变量,不能访问定义在类中的实例变量。没有用static修饰的方法就称为实例方法。实例方法只能在类的实例或子类的实例中调用。final:说明该方法为最终方法,即不能被子类重载
21、(子类的方法和父类方法同名,后面将会说明)。说明为final的方法通常与关键字private一起使用。例如:private final f_meth()第28页,共134页,编辑于2022年,星期一abstract:说明该方法是抽象方法。即该方法只有方法说明,没有方法体。如果一个类包含一个或多个抽象方法,则该类必须为抽象类。抽象类不能被实例化。但抽象类中的成员方法并不都是抽象方法,且抽象类中不能有私有成员方法,也不能有静态成员方法(因为不能被实现)。注意:抽象类必须被继承,抽象方法必须被重载。native:说明该方法是用与平台有关的开发语言编写的,即可以用该方法把Java代码和其他语言的代码集
22、成在一起。第29页,共134页,编辑于2022年,星期一synchronized:说明该方法是同步方法,用于控制多个并发线程对共享数据的访问。在后面多线程中会具体介绍同步方法。返回值类型:说明该方法的返回值类型,如果该方法无返回值,则返回值类型为void。形式参数列表:说明该方法中参数的数目和类型。异常类表:说明该方法可能产生的例外。第30页,共134页,编辑于2022年,星期一例2-5:变量和方法的声明和使用。/程序名:Sample2_5.javaclass A /声明类A int x;/声明变量x public int x()/声明方法x(),返回值为intreturn x;public
23、void setX(int newX)/声明方法setX(),无返回值 x=newX;第31页,共134页,编辑于2022年,星期一public class Sample2_5 /声明类Sample2_5public static void main(String args)A a1=new A();/声明并实例化A的对象a1A a2=new A();/声明并实例化A的对象a2 A a3=new A();/声明并实例化A的对象a3a1.setX(1);/调用对象a1的方法setX()给x赋值1a2.setX(2);/调用对象a2的方法setX()给x赋值2a3.x=3;/给对象a3的变量x赋值
24、3System.out.println(a1.x=+a1.x);/打印a1的变量x的值System.out.println(a2.x=+a2.x);/打印a2的变量x的值System.out.println(a3.x=+a3.x();/打印a3的方法x()返回值第32页,共134页,编辑于2022年,星期一运行结果如下:a1.x=1a2.x=2a3.x=3本例中,类A的对象a1、a2和a3是互相独立的,所以各对象输出的值各不相同。第33页,共134页,编辑于2022年,星期一2.2 对象2.2.1 创建对象类是一个抽象的概念,而对象则是具体的、实实在在存在的东西,对象的使用就是某个类的实例化操
25、作。类就象是某个产品的图纸,根据图纸生产出来的具体产品就是对象,在现实世界里,我们使用的是产品而不是产品的图纸。同样的道理,Java运行的是用类创建的实例化对象。一个典型的Java程序会创建很多对象,它们通过消息传递进行相互交流,共同完成程序的功能。一旦任务完成,对象就会被垃圾收集器收回,完成它从创建、使用到清除的生命三部曲。第34页,共134页,编辑于2022年,星期一Java中创建新的对象必须使用new语句,该语句有三个组成部分:声明对象、实例化、初始化,格式为:类名 对象名=new 类名(实际参数表);声明对象由类名和对象名组成,如等号左边部分;实例化由new操作符实现,实例化就是为对象
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 编程 基础 PPT 讲稿
限制150内