Java面向对象程序设计第7讲.ppt

上传人:小飞机 文档编号:6510312 上传时间:2023-11-07 格式:PPT 页数:41 大小:346.49KB
返回 下载 相关 举报
Java面向对象程序设计第7讲.ppt_第1页
第1页 / 共41页
Java面向对象程序设计第7讲.ppt_第2页
第2页 / 共41页
Java面向对象程序设计第7讲.ppt_第3页
第3页 / 共41页
Java面向对象程序设计第7讲.ppt_第4页
第4页 / 共41页
Java面向对象程序设计第7讲.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《Java面向对象程序设计第7讲.ppt》由会员分享,可在线阅读,更多相关《Java面向对象程序设计第7讲.ppt(41页珍藏版)》请在三一办公上搜索。

1、第5章 面向对象程序设计,5.1 类(class),类是组成Java程序的基本元素,它封装了一系列的变量(即数据成员,也域)和方法(即成员方法),是一类对象的原型。创建一个新的类,就是创建一个新的数据类型。实例化一个类,就得到一个对象。因此,对象就是一组变量和相关方法的集合,其中变量表明对象的状态、属性,方法表明对象所具有的行为。,类定义语句的一般形式为:修饰符class 类名 extends 父类名implements 接口名表 成员变量声明/类体方法成员声明,5.1.1 类定义(1),【例5.1】定义一个名为Rect表示长方形的类,它仅包含double类型的长length和宽width两个

2、数据成员。class Rect double length;double width;在类的定义中,可加入对数据成员进行操作的方法成员。,5.1.1 类定义(2),【例5.2】定义一个名为Rectangle表示长方形的类,它包含double类型的长length和宽width两个数据成员和设置长方形长宽值的方法setDim()、计算长方形面积的方法area()。class Rectangle double length;double width;double area()return length*width;void setDim(double w,double l)width=w;lengt

3、h=l;,5.1.1 类定义(3),在一个程序中,有时需要定义多个类。多个类的定义形式有两种:并列和嵌套。常见的多个类定义形式为并列定义,即一个类接着一个类进行定义,它们之间是并列的关系。另一种形式为嵌套定义,即在一个类中定义另外的类,它们之间是包含和被包含的关系,可分别称为包含类和内部类(或嵌套类)。采用何种形式定义多个类,由类之间的访问关系确定。,5.1.1 类定义(4),5.1.1 类定义(5),类定义了一个类型(type)。与Java语言提供的几种基本类型一样,类型用来声明、定义该类型的变量。例如,下面的语句:Rect rect1;声明变量rect1的类型为类Rect。类型为类的变量与

4、基本类型变量有所不同,类是一种引用(reference)类型。实际上,rect1是一个对类型为类Rect的对象的引用,rect1不是对象本身,可理解为一个指针,上述声明仅生成一个空(null)引用。,一旦定义了所需的类,就可以创建该类的变量,创建类的变量称为类的实例化,类的变量也称为类对象、类的实例等。类的对象是在程序运行中创建生成的,其所占的空间在程序运行中动态分配。当一个类的对象完成了它的使命,为节省资源,Java的垃圾收集程序就会自动收回这个对象所占的空间。即类对象有自己的生命周期。,5.1.2 类对象(1),5.1.2 类对象(2),1.创建对象创建类的对象需用new运算符,一般形式为

5、:对象名=new 类名()new运算符用指定的类在内存中分配空间,并将存储空间的引用存入语句中的对象变量。例如:rect1=new Rect();new运算符也可以与类声明一起使用来创建类的对象。例如:Rect rect1=new Rect();,2.引用对象在创建了类的对象后,就可以对对象的各个成员进行访问,进行各种处理。访问对象成员的一般形式为:对象名.数据成员名对象名.成员方法名()/方法名带圆括号,5.1.2 类对象(3),运算符“.”称为成员运算符,在对象名和成员名之间起到连接的作用,指明是哪个对象的哪个成员。例如:设已经定义了例5.2中的Rectangle类,可以用如下的方法来引用

6、对象的成员:Rectangle r=new Rectangle();/定义类的对象r.length,r.width/引用对象的数据成员r.area()/引用对象的成员方法,5.1.2 类对象(4),【例5.3】利用例5.1定义的类Rect,计算长和宽分别为20和10的长方形面积。class RectDemo public static void main(String args)Rect rect1=new Rect();/为对象rect1分配存储空间 double area;rect1.width=20;/向数据成员赋值rect1.length=10;area=rect1.width*rec

7、t1.length;/对数据成员运算System.out.println(长方形面积是:+area);运行结果如下:长方形面积是:200.0,5.1.2 类对象(4),【例5.5】用例5.2中定义的类Rectangle分别计算长、宽分别为20、10和6、3的两个长方形面积。class RectDemo2 public static void main(String args)Rectangle rect1=new Rectangle();Rectangle rect2=new Rectangle();double ar;rect1.setDim(20,10);/初始化每个长方形rect2.se

8、tDim(6,3);,5.1.2 类对象(5),5.1.2 类对象(5),ar=rect1.area();System.out.println(第一个长方形的面积是:+ar);ar=rect2.area();System.out.println(第二个长方形的面积是:+ar);程序运行结果如下:第一个长方形的面积是:200.0第二个长方形的面积是:18.0,在Java中,任何变量在被使用前都必须先设置初值。Java提供了为类的成员变量赋初值的专门功能:构造方法。构造方法是一种特殊的成员方法,特殊性:(1)构造方法名与类名相同。(2)构造方法不返回任何值,也没有返回类型。(3)每一个类可以有零个

9、或多个构造方法。(4)构造方法在创建对象时自动执行,一般不能显式地直接调用。,5.1.3 构造方法(1),【例5.6】分别计算长、宽分别为20、10和6、3的两个长方形面积。本程序用构造方法来初始化长方形的大小。class RectConstructor double length;double width;double area()return length*width;RectConstructor(double l,double w)length=l;width=w;,5.1.3 构造方法(2),class RectDemo3 public static void main(String

10、 args)RectConstructor rect1=new RectConstructor(20,10);RectConstructor rect2=new RectConstructor(6,3);double ar;ar=rect1.area();System.out.println(第一个长方形的面积是:+ar);ar=rect2.area();System.out.println(第二个长方形的面积是:+ar);程序运行结果如下:第一个长方形的面积是:200.0 第二个长方形的面积是:18.0,5.1.3 构造方法(3),在类和类的成员定义时可以使用一些修饰符来对类和成员的使用作某

11、些限定。一般将修饰符分为两类:访问控制符和非访问控制符。访问控制符有public、protected、private等,它们的作用是给予对象一定的访问权限,实现类和类中成员的信息隐藏。非访问控制符作用各不相同,有static、final、native、volatile、abstract等。某些修饰符只能应用于类的成员,某些修饰符既可应用于类也可应用于类的成员。,5.1.4 类和成员的修饰符(1),1.static修饰符,修饰类的成员变量和方法成员,使它们成为静态成员,也称为类成员。静态成员存储于类的存储区,属于整个类,而不属于一个具体的类对象。因为静态成员属于整个类,所以它被所有该类对象共享。

12、在不同的类对象中访问静态成员,访问的是同一个。注意两点:(1)静态方法不能访问属于某个对象的成员变量,而只能处理属于整个类的成员变量。即静态方法只能处理静态变量。(2)可以用两种方式调用静态成员,它们的作用相同。变量:类名.变量、类对象.变量。方法:类名.方法名()、类对象.方法名()。,5.1.4 类和成员的修饰符(2),【例5.8】静态成员的使用。class StaticDemo static int a=42;static int b=99;static void callme()System.out.println(a=+a);,5.1.4 类和成员的修饰符(3),class Stat

13、icByName public static void main(String args)StaticDemo.callme();System.out.println(b=+StaticDemo.b);程序运行结果如下:a=42 b=99,5.1.4 类和成员的修饰符(4),5.1.4 类和成员的修饰符(5),2.final修饰符,可应用于类、方法和变量。final的意义为终极或最终。final类不能被继承,即final类无子类。final方法不能被覆盖,即子类的方法名不能与父类的final方法名相同。final变量实际上是Java语言的符号常量,可在定义时赋初值或在定义后的其他地方赋初值,但

14、不能再次赋值,习惯上使用大写的标识符表示final变量。例如:final double PI=3.1416;final double G=9.18;因为final变量不能改变,没有必要在每个对象中进行存储,可以将final变量声明为静态的,以节省存储空间。例如:static final double PI=3.1416;,3.abstract修饰符abstract修饰符可应用于类和方法,称为抽象类和抽象方法。抽象类需要继承、抽象方法需要在子类中实现才有意义。4.native修饰符native修饰符一般用来声明用其他语言如C、C+、FORTRAN、汇编等书写方法体并具体实现方法功能的特殊方法。由

15、于native方法的方法体使用其他语言编写。所以所有的native方法都没有方法体。native方法可应用于实时性强、执行效率高,运行速度要求较高的场合。,5.1.4 类和成员的修饰符(5),5.synchronized修饰符synchronized修饰符可应用于方法或块,在多线程程序中,对用于共享的方法和块加互斥锁,使得任一时刻,synchronized方法或块只能由一个线程执行或操作。,5.1.4 类和成员的修饰符(5),5.1.5 类的使用(1),1.私有成员的访问为了降低类间的耦合性,可以为类成员指定private修饰符,表示该成员只能在该类内部访问。若需要在其他类中访问私有成员,只能

16、通过取数和送数的方法来访问。这样的方法常命名为getXxx()和setXxx()等。,【例5.9】私有成员的访问。class RectangleRC private double length;private double width;double getLength()/定义取长方形边长的方法 return length;double getWidth()return width;,5.1.5 类的使用(2),5.1.5 类的使用(3),RectangleRC(double l,double w)length=l;width=w;class RectDemo5 public static v

17、oid main(String args)RectangleRC rect1=new RectangleRC(8,7);double ar=rect1.getLength()*rect1.getWidth();System.out.println(长方形的面积是:+ar);,2.方法参数是类的对象方法的参数类型可以是引用类型类。类的对象中实际存储为对象的引用,在调用类参数时方法间传送的是引用。尽管Java采用值传送,引用从调用方法单向传送到被调方法,但由于调用方法与被调方法对应类参数的引用相同,它们引用同一对象,所以,若在被调方法中修改了引用类型形式参数的取值,则调用方法对应的实际参数也将发生

18、相应的变化。即调用方法与被调方法之间是“引用单向传送,数据双向传送”。应用引用类型的方法参数,可在方法间传送数据。,5.1.5 类的使用(4),【例5.10】引用类型的方法参数是方法间传送数据的桥梁。class RefParameter double width,length,area;RefParameter(double w,double l)width=w;length=l;void calArea(RefParameter r)r.area=r.width*r.length;,5.1.5 类的使用(5),class PassObject public static void main(

19、String args)RefParameter rr=new RefParameter(10,20);rr.calArea(rr);System.out.println(长方形面积为:+rr.area);程序运行结果如下:长方形面积为:200.0,5.1.5 类的使用(6),5.1.5 类的使用(7),3.方法返回值为类的对象在Java语言中,方法的返回值类型也可以为引用类型,例如:类。,5.1.5 类的使用(8),【例5.11】方法的返回值类型为引用类型。class RetClass double width,length,area;RetClass(double w,double l)w

20、idth=w;length=l;RetClass calArea(RetClass r)r.area=r.width*r.length;,return r;class ReturnObjectpublic static void main(String args)RetClass rr=new RetClass(10,20);rr=rr.calArea(rr);System.out.println(长方形面积为:+rr.area);程序运行结果如下:长方形面积为:200.0,5.1.5 类的使用(9),4.类对象作为类的成员类的数据成员也可以是引用类型的数据,如数组、字符串和类等。若一个类的对

21、象是一个类的成员时,要用new运算符为这个对象分配存储空间。在包含类数据成员的类及类的实例中可以访问类数据成员的成员。,5.1.5 类的使用(10),class RectangleC/具有两个成员的类RectC r=new RectC(10,20);/类成员要分配空间double area;/基本类型成员 class ClassMember public static void main(String args)RectangleC rr=new RectangleC();rr.area=rr.r.width*rr.r.length;System.out.println(长方形面积为:+rr.

22、area);程序运行结果如下:长方形面积为:200.0,5.1.5 类的使用(11),5.内部类(Inner class)内部类,也称为嵌套类,被附加到JDK1.1及更高版本中。内部类允许一个类定义被放到另一个类定义里、一个语句块里或一个表达式内部。内部类是一个有用的特征,因为它们允许将逻辑上同属性的类组合到一起,并在另一个类中控制一个类的可视性。,5.1.5 类的使用(12),【例5.13】在一个类中定义类(内部类)。class RectDemo6 public static void main(String args)double ar;class RectangleR double le

23、ngth;double width;double area()return length*width;/返回面积 程序运行结果如下:长方形的面积是:56.0,5.1.5 类的使用(12),void setDim(double w,double l)width=w;length=l;RectangleR rect1=new RectangleR();RectangleR rect2=new RectangleR();rect1.setDim(10,20);/初始化每个长方形 rect2.setDim(3,6);ar=rect1.area();System.out.println(第一个长方形面积

24、是:+ar);ar=rect2.area();System.out.println(第二个长方形面积是:+ar);,5.1.5 类的使用(13),程序运行结果如下:第一个长方形面积是:200.0第二个长方形面积是:18.0因为内部类定义在一个类中,因此内部类的名称不能与所嵌套的类相同,而且只能在定义的范围中使用。内部类具有下面一些特性:(1)内部类可以被定义在方法中。它可以访问嵌套类的方法的final变量。,5.1.5 类的使用(14),(2)内部类可以使用所嵌套类的类变量和实例变量以及所嵌套的块中的本地变量。(3)内部类可以被定义为abstract抽象类。(4)内部类可以被声明为private或protected,以便防护它们不受来自外部类的访问。访问保护不阻止内部类使用其他类的任何成员。(5)一个内部类可以作为一个接口,由另一个内部类实现。,5.1.5 类的使用(15),(6)声明为static的内部类成为顶层类。这些内部类失去了在本地范围和其他内部类中使用数据或变量的能力。(7)内部类不能声明任何static成员,只有顶层类可以声明static成员。因此,一个需求static成员的内部类必须使用来自顶层类的成员。,5.1.5 类的使用(16),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号