Java程序设计第2版第七章课件.ppt

上传人:飞****2 文档编号:73607085 上传时间:2023-02-20 格式:PPT 页数:45 大小:218.51KB
返回 下载 相关 举报
Java程序设计第2版第七章课件.ppt_第1页
第1页 / 共45页
Java程序设计第2版第七章课件.ppt_第2页
第2页 / 共45页
点击查看更多>>
资源描述

《Java程序设计第2版第七章课件.ppt》由会员分享,可在线阅读,更多相关《Java程序设计第2版第七章课件.ppt(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第7 7章章JavaJava类的特性类的特性 通过本章的学习,主要掌握以下知识点:通过本章的学习,主要掌握以下知识点:类的私有成员与公共成员类的私有成员与公共成员 方法的重载方法的重载 构造方法构造方法 实例成员与静态成员实例成员与静态成员 2/19/20232本章的重点:本章的重点:方法的重载方法的重载 构造方法构造方法 本章的难点:本章的难点:静态成员静态成员2/19/202337.1 类的私有成员与公共成员类的私有成员与公共成员在第在第6 6章的例子中,可以看到类的成员变量章的例子中,可以看到类的成员变量pipi、radiusradius和和heightheight可以在类可以在类Cy

2、linderCylinder的外部任意修改。的外部任意修改。这虽然方便了程序员灵活的使用,但也存在弊端。这虽然方便了程序员灵活的使用,但也存在弊端。2/19/20234如果没有一个机制来限制对类中成员的访问,如果没有一个机制来限制对类中成员的访问,则很可能会造成错误的输入。为了防止这种情况则很可能会造成错误的输入。为了防止这种情况的发生,的发生,Java提供了私有成员访问控制修饰符提供了私有成员访问控制修饰符private。下面来举例说明。下面来举例说明。7.1.1 7.1.1 私有成员私有成员2/19/20235【例例7.1】在圆柱体类在圆柱体类Cylinder中,创建类的中,创建类的私有成

3、员,使之在该类的外部无法访问该成员。私有成员,使之在该类的外部无法访问该成员。/app7_1.java 定义私有成员,使之无法在类外被访问定义私有成员,使之无法在类外被访问class Cylinder /定义定义Cylinder类类 private double radius;/将数据成员将数据成员radius声明为私有的声明为私有的 private int height;/将数据成员将数据成员height声明为私有的声明为私有的 private double pi=3.14;/将数据成员将数据成员pi声明为私有的,并赋初值声明为私有的,并赋初值 double area()return pi*

4、radius*radius;/在在Cylinder类内部,故可访问私有成员类内部,故可访问私有成员 double volume()return area()*height;/在类内可以访问私有成员在类内可以访问私有成员height 2/19/20236【例例7.1】续续public class app7_1 /定义公共主类定义公共主类 public static void main(String args)Cylinder volu;volu=new Cylinder();volu.radius=2.8;/错误!在类的外部,不能直接访问私有成员。错误!在类的外部,不能直接访问私有成员。volu

5、.height=-5;/错误!在类的外部,不能直接访问私有成员。错误!在类的外部,不能直接访问私有成员。System.out.println(底圆半径底圆半径=+volu.radius);System.out.println(圆柱的高圆柱的高=+volu.height);System.out.print(圆柱圆柱);System.out.println(“底面积底面积=”+volu.area();/正确!正确!System.out.println(圆柱体体积圆柱体体积=+volu.volume();/正确!正确!2/19/202377.1.2 7.1.2 公共成员公共成员如果在类的成员声明的前

6、面加上修饰符如果在类的成员声明的前面加上修饰符public,则表示该成员可以被所有其他的类所访问。由于则表示该成员可以被所有其他的类所访问。由于public修饰符会造成安全性和数据封装性的下降,所修饰符会造成安全性和数据封装性的下降,所以一般应减少公共成员的使用。下面举例说明如何以一般应减少公共成员的使用。下面举例说明如何利用公共方法来访问私有成员变量。利用公共方法来访问私有成员变量。2/19/20238【例例7.2】创建圆柱体类创建圆柱体类Cylinder的公共成员的公共成员方法,来访问类内的私有成员变量方法,来访问类内的私有成员变量。/app7_2.java 定义公共方法来访问私有成员定义

7、公共方法来访问私有成员class Cylinder private double radius;/声明私有数据成员声明私有数据成员 private int height;private double pi=3.14;public void SetCylinder(double r,int h)/声明具有声明具有2个参数的公共方法个参数的公共方法 /用于对私有数据进行访问用于对私有数据进行访问 if(r0&h0)radius=r;height=h;else System.out.println(“您的数据有错误!您的数据有错误!”);2/19/20239【例例7.2】续续 double area

8、()return pi*radius*radius;/在类内可以访问私有成员在类内可以访问私有成员radius和和pi double volume()return area()*height;/在类内可以访问私有成员在类内可以访问私有成员height public class app7_2 /定义公共主类定义公共主类 public static void main(String args)Cylinder volu=new Cylinder();volu.SetCylinder(2.5,-5);/通过公共方法通过公共方法SetCylinder()访问私有数据访问私有数据 System.out.

9、println(圆柱底面积圆柱底面积=+volu.area();System.out.println(圆柱体体积圆柱体体积=+volu.volume();2/19/202310程序运行结果如下:程序运行结果如下:您的数据有错误!您的数据有错误!圆柱底面积圆柱底面积=0.0圆柱体体积圆柱体体积=0.0【例例7.2】续续2/19/2023117.1.3 友元友元若在类成员的前面加上访问控制符若在类成员的前面加上访问控制符friendly,说明该成员是友元。友元访问控制符可以省略。也说明该成员是友元。友元访问控制符可以省略。也就是说在类内声明类成员时,不加任何访问控制修就是说在类内声明类成员时,不加

10、任何访问控制修饰符,则该成员是一个友元。一个成员被声明为友饰符,则该成员是一个友元。一个成员被声明为友元,表示这个成员只能被同一个包中的类所访问,元,表示这个成员只能被同一个包中的类所访问,但其他包中的类不能访问该成员。但其他包中的类不能访问该成员。同理,对于类来说,如果一个类没有访问控制同理,对于类来说,如果一个类没有访问控制符,说明它具有缺省访问控制特性。这种缺省的访符,说明它具有缺省访问控制特性。这种缺省的访问控制权规定只能被同一个包中的类访问和引用,问控制权规定只能被同一个包中的类访问和引用,而不可以被其他包中的类所使用。而不可以被其他包中的类所使用。2/19/2023127.2 7.

11、2 方法的重载方法的重载方法的重载是实现方法的重载是实现“多态多态”的一种方法。在面的一种方法。在面向对象的程序设计语言中,有一些方法的含义相同,向对象的程序设计语言中,有一些方法的含义相同,但带有不同的参数,这些方法使用相同的名字,这但带有不同的参数,这些方法使用相同的名字,这就叫方法的重载就叫方法的重载(Overloading)。也就是说,重载。也就是说,重载是指相同的方法名称,如果参数个数不同,或者是是指相同的方法名称,如果参数个数不同,或者是参数个数相同,但类型不同,则方法就具有不同的参数个数相同,但类型不同,则方法就具有不同的功能。功能。2/19/202313 注意:注意:方法的重载

12、中参数的类型是关键,仅仅是参数的变量名不同是不行的。也就是说参数的列表必须不同,即:或者参数个数不同,或者参数类型不同,或者参数的顺序不同。方法的重载的应用见教材方法的重载的应用见教材【例例7.37.3】2/19/2023147.3 7.3 构造方法构造方法前面所介绍的由前面所介绍的由Cylinder类所创建的对象,类所创建的对象,其成员变量都是在对象建立之后,再由相应的方其成员变量都是在对象建立之后,再由相应的方法来赋值。如果一个对象在被创建时就完成了所法来赋值。如果一个对象在被创建时就完成了所有的初始化工作,将会很简洁。因此有的初始化工作,将会很简洁。因此Java在类里在类里提供了一个特殊

13、的成员方法提供了一个特殊的成员方法构造方法。构造方法。2/19/202315构造方法构造方法(constructor)是一种特殊的方法,是一种特殊的方法,它是在对象被创建时初始化对象的成员的方法。构它是在对象被创建时初始化对象的成员的方法。构造方法的名称必须与它所在的类名完全相同。造方法的名称必须与它所在的类名完全相同。7.3.1 7.3.1 构造方法的作用与定义构造方法的作用与定义2/19/202316/app7_4.java 构造方法的使用class Cylinder /定义类Cylinder private double radius;private int height;private

14、 double pi=3.14;public Cylinder(double r,int h)/定义构造方法 radius=r;height=h;double area()return pi*radius*radius;【例例7.47.4】利用构造方法来初始化圆柱体类利用构造方法来初始化圆柱体类Cylinder的成员变量的成员变量。2/19/202317double volume()return area()*height;public class app7_4 /定义主类 public static void main(String args)Cylinder volu=new Cylind

15、er(3.5,8);/创建对象并调用构造方法 System.out.println(圆柱底积=+volu.area();System.out.println(圆柱体体积=+volu.volume();【例例7.4】续续2/19/202318程序运行结果如下:程序运行结果如下:圆柱底积圆柱底积=38.465=38.465圆柱体体积圆柱体体积=307.72=307.72【例例7.4】续续2/19/202319构造方法的特殊性主要体现在如下几个方面:构造方法的特殊性主要体现在如下几个方面:1.构造方法的方法名与类名相同;构造方法的方法名与类名相同;2.构造方法没有返回值,也不能写构造方法没有返回值,

16、也不能写void;3.构造方法的主要作用是完成对类对象的初始化构造方法的主要作用是完成对类对象的初始化工作;工作;4.构造方法一般不能由编程人员显式地直接调用,构造方法一般不能由编程人员显式地直接调用,而是用而是用new来调用;来调用;5.在创建一个类的对象的同时,系统会自动调用在创建一个类的对象的同时,系统会自动调用该类的构造方法为新对象初始化。该类的构造方法为新对象初始化。2/19/202320细心的读者可能会发现,在例细心的读者可能会发现,在例7.4以前的例子中以前的例子中均没有定义构造方法,依然可以创建新的对象,并均没有定义构造方法,依然可以创建新的对象,并能正确的执行程序,这是因为如

17、果省略构造方法,能正确的执行程序,这是因为如果省略构造方法,Java会自动调用默认的构造方法会自动调用默认的构造方法(default constructor)。默认的构造方法没有参数,在其方法。默认的构造方法没有参数,在其方法体中也没有任何代码,即什么也不做。如果上面例体中也没有任何代码,即什么也不做。如果上面例子中的子中的Cylinder类没有定义构造方法,则系统会产生类没有定义构造方法,则系统会产生默认的构造方法如下:默认的构造方法如下:Cylinder()7.3.2 7.3.2 默认的构造方法默认的构造方法2/19/202321一般情况下,类都有一个至多个构造方法。但一般情况下,类都有一

18、个至多个构造方法。但由于构造方法与类同名,所以当一个类有多个构造由于构造方法与类同名,所以当一个类有多个构造方法时,则这多个构造方法可以重载。方法时,则这多个构造方法可以重载。7.3.3 7.3.3 构造方法的重载构造方法的重载构造方法重载的应用见教材构造方法重载的应用见教材【例例7.5】。2/19/202322从某一构造方法内调用另一构造方法,是通过从某一构造方法内调用另一构造方法,是通过关键字关键字thisthis来调用的。见教材例来调用的。见教材例【例例7.6】。7.3.4 从一个构造方法调用另一个构造方法从一个构造方法调用另一个构造方法2/19/202323构造方法一般都是公有构造方法

19、一般都是公有(public)的,而不可以的,而不可以声明为私有的,这是因为它们在创建对象时,是在声明为私有的,这是因为它们在创建对象时,是在类的外部被系统自动调用的。如果构造方法被声明类的外部被系统自动调用的。如果构造方法被声明为为private,则无法在该构造方法所在的类以外的地,则无法在该构造方法所在的类以外的地方被调用,但在该类的内部还是可以被调用的。方被调用,但在该类的内部还是可以被调用的。见教材例见教材例7.77.3.5 公共构造方法与私有构造方法公共构造方法与私有构造方法2/19/202324staticstatic称为静态修饰符,它可以修饰类中的成称为静态修饰符,它可以修饰类中的

20、成员。被员。被staticstatic修饰的成员被称为静态成员,也称为修饰的成员被称为静态成员,也称为类成员,否则不用类成员,否则不用staticstatic修饰的成员称为实例成员。修饰的成员称为实例成员。7.4 静态成员静态成员2/19/202325 在类定义中如果成员变量或成员方法没有用在类定义中如果成员变量或成员方法没有用staticstatic来修饰,则该成员就是实例成员。对实例成来修饰,则该成员就是实例成员。对实例成员,我们并不陌生,因为在此之前编写的程序中,员,我们并不陌生,因为在此之前编写的程序中,用到的都是实例成员。用到的都是实例成员。7.4.1 7.4.1 实例成员实例成员2

21、/19/202326用用static修饰的成员变量称为修饰的成员变量称为“静态变量静态变量”,静态变量也称为类变量。静态变量是隶属于类的变静态变量也称为类变量。静态变量是隶属于类的变量,而不是属于任何一个类的具体对象。量,而不是属于任何一个类的具体对象。换句话说就是,静态变量不需要实例化就可以换句话说就是,静态变量不需要实例化就可以使用。当然也可以通过实例对象来访问静态变量。使用。当然也可以通过实例对象来访问静态变量。使用格式是:使用格式是:类名类名.静态变量名静态变量名 对象名对象名.静态变量名静态变量名7.4.2 7.4.2 静态变量静态变量2/19/202327/app7_8.java

22、静态变量的使用class Cylinder /定义类Cylinder private static int num=0;/声明num为静态变量 private static double pi=3.14;/声明pi为静态变量,并赋初值 private double radius;private int height;public Cylinder(double r,int h)/定义有2个参数的构造方法 radius=r;height=h;num+;/当构造方法Cylinder()被调用时,num便加1 public void count()/count()方法用来显示目前创建对象的个数 Sy

23、stem.out.print(“创建了+num+”个对象:”);【例例7.87.8】将将CylinderCylinder类里的变量类里的变量pipi和和numnum声明为静态变量。声明为静态变量。2/19/202328 double area()return pi*radius*radius;double volume()return area()*height;public class app7_8 /主类 public static void main(String args)Cylinder volu1=new Cylinder(2.5,5);volu1.count();System.o

24、ut.println(圆柱1的体积=+volu1.volume();Cylinder volu2=new Cylinder(1.0,2);volu2.count();System.out.println(圆柱2的体积=+volu2.volume();【例例7.8】续续2/19/202329程序运行结果为:程序运行结果为:创建了创建了1 1个对象:圆柱个对象:圆柱1 1的体积的体积=98.125=98.125创建了创建了2 2个对象:圆柱个对象:圆柱2 2的体积的体积=6.28=6.28【例例7.8】续续2/19/202330与静态变量相似,用与静态变量相似,用staticstatic修饰符修饰

25、的方法修饰符修饰的方法是属于类的静态方法,又称为类方法。静态方法实是属于类的静态方法,又称为类方法。静态方法实质是属于整个类的方法,而不加质是属于整个类的方法,而不加staticstatic修饰符的方修饰符的方法,是属于某个具体对象的方法。法,是属于某个具体对象的方法。7.4.3 7.4.3 静态方法静态方法静态方法的应用见教材静态方法的应用见教材【例例7.9】。2/19/202331静态初始化器是由关键字静态初始化器是由关键字static修饰的一对花修饰的一对花括号括号“”括起来的语句组。它的作用与类的构造括起来的语句组。它的作用与类的构造方法有些相似,都是用来初始化工作的,但静态初方法有些

26、相似,都是用来初始化工作的,但静态初始化器与构造方法有几点根本的不同。始化器与构造方法有几点根本的不同。7.4.4 7.4.4 静态初始化器静态初始化器2/19/2023321构造方法是对每个新创建的对象初始化,而构造方法是对每个新创建的对象初始化,而静态初始化器是对类自身进行初始化。静态初始化器是对类自身进行初始化。2构造方法是在用构造方法是在用new运算符创建新对象时由系运算符创建新对象时由系统自动执行,而静态初始化器一般不能由程序来调统自动执行,而静态初始化器一般不能由程序来调用,它是在所属的类被加载入内存时由系统调用执用,它是在所属的类被加载入内存时由系统调用执行。行。3用用new运算

27、符创建多少个新对象,构造方法被运算符创建多少个新对象,构造方法被调用多少次,但静态初始化器则在类被加载入内存调用多少次,但静态初始化器则在类被加载入内存时只执行一次,与创建多少个对象无关。时只执行一次,与创建多少个对象无关。4不同于构造方法,静态初始化器不是方法,不同于构造方法,静态初始化器不是方法,因而没有方法名、返回值和参数。因而没有方法名、返回值和参数。2/19/202333声明一个对象的格式与声明一般变量相似,即声明一个对象的格式与声明一般变量相似,即“类名类名 对象名对象名”。因而也可以将对象称之为。因而也可以将对象称之为“类类类类型的变量型的变量”,它属于非基本类型的变量。实际上对

28、,它属于非基本类型的变量。实际上对象是一种引用型的变量,而引用型变量实际上保存象是一种引用型的变量,而引用型变量实际上保存的是对象在内存中的地址(也称为对象的句柄),的是对象在内存中的地址(也称为对象的句柄),所以就对象的功能而言,对象是所以就对象的功能而言,对象是“指向对象的变量指向对象的变量”,但就其类型而言它是属于,但就其类型而言它是属于“类类型的变量类类型的变量”。7.5 7.5 对象的应用对象的应用2/19/202334在使用对象时,一般是先用在使用对象时,一般是先用newnew运算符创建对运算符创建对象,然后再对其进行操作处理。但有时没有使用象,然后再对其进行操作处理。但有时没有使

29、用newnew运算符创建新对象,仍然可以对其进行赋值。运算符创建新对象,仍然可以对其进行赋值。7.5.1 7.5.1 对象的赋值与比较对象的赋值与比较2/19/202335引用变量不但可以作为参数进行传递,而且也引用变量不但可以作为参数进行传递,而且也可以作为方法的返回值。若要方法返回类类型的变可以作为方法的返回值。若要方法返回类类型的变量,只须在方法声明的前面加上要返回的类即可。量,只须在方法声明的前面加上要返回的类即可。7.5.2 引用变量作为方法的返回值引用变量作为方法的返回值2/19/202336在第在第5章中介绍过数组,数组元素可以是存放章中介绍过数组,数组元素可以是存放各种类型的数

30、据,当然数组也可以用来存放对象。各种类型的数据,当然数组也可以用来存放对象。用数组来存放对象,一般要经过如下的两个步骤:用数组来存放对象,一般要经过如下的两个步骤:1.声明类类型的数组变量,并用声明类类型的数组变量,并用new运算符分运算符分配内存空间给数组;配内存空间给数组;2.用用new创建新的对象,分配内存空间给它,创建新的对象,分配内存空间给它,并让数组元素指向它。并让数组元素指向它。下面举例说明。下面举例说明。7.5.3 7.5.3 类类型的数组类类型的数组2/19/202337/app7_13.java 对象数组的应用class Person /定义类Person private

31、String name;private int age;public Person(String name,int age)this.name=name;this.age=age;public void show()System.out.println(“姓名:“+name+”年龄:”+age);【例例7.13】对象数组的应用。以个人类对象数组的应用。以个人类Person为类型,为类型,创建数组创建数组。2/19/202338public class app7_13 /主类 public static void main(String args)Person Per;/声明类类型的数组 Per

32、=new Person3;/用new为数组分配内存空间 Per0=new Person(“张三”,20);/用new运算符创建新对象,并分 Per1=new Person(“李四”,21);/配给数组元素 Per2=new Person(“王二”,19);Per2.show();/利用对象Per2调用show()方法 Per0.show();/利用对象Per0调用show()方法 【例例7.13】续续2/19/202339程序执行结果如下:程序执行结果如下:姓名:王二姓名:王二 年龄:年龄:19姓名:张三姓名:张三 年龄:年龄:20【例例7.13】续续2/19/202340通过例通过例7.13

33、可以知道,数组也可以用来存放对可以知道,数组也可以用来存放对象。因此也可将对象数组作为参数传递到方法里。象。因此也可将对象数组作为参数传递到方法里。下面举例说明。下面举例说明。7.5.4 以对象数组为参数进行方法调用以对象数组为参数进行方法调用2/19/202341/app7_14.java 以对象数组为参数进行方法调用class Person /定义类Person private String name;private int age;public Person(String name,int age)this.name=name;this.age=age;public static int

34、 min_age(Person p)/以对象数组作为参数传递给方法 int min=200;for(int i=0;ip.length;i+)if(pi.agemin)min=pi.age;return min;【例例7.14】以对象数组作为参数传递给方法。以对象数组作为参数传递给方法。2/19/202342public class app7_14 public static void main(String args)Person Per=new Person3;Per0=new Person(“张三”,20);Per1=new Person(“李四”,21);Per2=new Person(“王二”,19);System.out.println(“最小的年龄为:”+Person.min_age(Per);【例例7.14】续续2/19/202343程序的执行结果为:程序的执行结果为:最小的年龄为:最小的年龄为:19【例例7.14】续续2/19/202344谢谢2/19/202345

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁