《Java程序设计教程》课件第五章:类和对象.pptx

上传人(卖家):momomo 文档编号:7669045 上传时间:2024-06-23 格式:PPTX 页数:81 大小:3.60MB
下载 相关 举报
《Java程序设计教程》课件第五章:类和对象.pptx_第1页
第1页 / 共81页
《Java程序设计教程》课件第五章:类和对象.pptx_第2页
第2页 / 共81页
《Java程序设计教程》课件第五章:类和对象.pptx_第3页
第3页 / 共81页
《Java程序设计教程》课件第五章:类和对象.pptx_第4页
第4页 / 共81页
《Java程序设计教程》课件第五章:类和对象.pptx_第5页
第5页 / 共81页
点击查看更多>>
资源描述

1、本章学习目标:了解面向对象程序设计的基本思想 掌握类和对象的声明与使用 熟练掌握方法的声明,参数的传递和方法的重载 掌握this和static关键字的使用 掌握访问控制修饰符 了解包的声明和使用 了解单例类的概念第五章第五章 类和对象类和对象第第1 1节节part面向对象思想 面向对象是以现实生活中客观存在的事物(即对象)来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以事物为中心来思考、分析问题,并根据事物的本质特征将其抽象为系统中的对象,作为系统的基本构成单位。面向对象思想本节概述 当前,在软件开发领域有两种主流的开发方法:结构化开发方法(Structure Analy

2、sis Structure Design,SASD)和面向对象(Object Oriented,OO)开发方法。结构化开发又叫面向过程开发,在1978年,由E.Yourdon和L.L.Constantine提出,也可以称为面向功能的软件开发方法或面向数据流的软件开发方法。在早期编程语言中,如BASIC、C语言、FORTRAN、Pascal等都支持机构化开发,其基本原理是将一个软件分为多个过程(函数)进行开发,用结构体(Struct)管理数据。1979年,Tom Demarco对此方法做了进一步完善。首先用结构化分析(Structure Analysis,SA)对软件进行需求分析,然后用结构化设

3、计(Structure Design,SD)方法进行总体设计,最后用结构化编程(Structure Programming,SP)完成,这种方法能够明确开发步骤。结构化设计属于自顶向下的设计,局限性在于不能灵活地适应用户不断变化的需求,制约了软件的可维护性和可扩展性,模块之间的松耦合性不高,修改或增加一个模块会影响其他模块,甚至推翻整个设计。5.1.1面向对象简介面向对象简介 为了提高效率,降低开发成本,优良的软件系统应该具备以下几个条件。1 1.可重用性可重用性 减少软件中的代码重复编程,实现一次编程,多次使用。2 2.可扩展性可扩展性 当软件必须增加新的功能时,能够在现有系统结构的基础上,

4、方便地创建新的子系统,而不需要改变系统现有的结构,也不会影响已经存在的子系统。3 3.可维护性可维护性 当用户需求发生变化时,只需要修改局部子系统的少量代码,而不需要全部改动。结构化程序设计的局限性以及人们在工作中对软件使用的迫切要求,推动了面向对象程序开发方法的迅速发展。面向对象程序设计语言,如Java、C+、C#等应运而生。面向对象出现在20世纪70年代,但由于受到当时软硬件限制,直到20世纪90年代,才成为大众所接受的主流的程序设计思想。5.1.1面向对象简介 面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。面向对象的开发方法

5、具有以下优点。(1)把软件系统看成是各种对象的集合,接近于人类的思维方式,可以使人的思路更加明确。(2)软件的功能需求发生变动时,功能的执行者对象一般不会发生有大的变化,这使得按照对象设计出来的系统结构比较稳定。(3)对象包括属性(数据)和行为(方法),对象把数据和方法的具体实现封装在一起,提高了每个子系统的相对独立性,从而提高了软件的可维护性。(4)支持封装、继承、多态和抽象,提高了软件的可重用性、可维护性和可扩展性。在面向对象软件开发过程中,开发者的主要任务就是先建立模拟问题领域的对象模型,然后通过程序代码来实现对象模型。以下介绍面向对象开发方法中常用的基本概念。5.1.1面向对象简介 面

6、向对象的基本名称包括对象、类、消息、封装性、继承性和多态性。1 1.对象对象 面向对象开发最大的成功之处在于添加了“对象”的概念,客观世界中的任何实体都可以用对象(Object)来表示,对象是实体的抽象,由一组表示其静态特征的属性和它可执行的一组操作组成。例如,一个人是一个对象,它包含描述人的属性(如姓名、性别、出生日期、身份证号等)及其操作(如吃饭、睡觉、工作、运动等);一本图书也是一个对象,它包含描述图书的属性(如书名、作者、单价、出版社等)及其操作(销售、入库、出库等)。在面向对象开发方法中,每个对象都是具体的,也是唯一的。例如,图书一和图书二是两个不同的对象,它们虽然具有相同的属性和方

7、法,但是其属性和方法的具体内容并不相同,如图书一的书名是Java程序设计,作者是张三,单价为30元,出版社是西安电子工业出版社;而图书二的书名是C语言程序设计,作者是李四,单价为28元,出版社是清华大学出版社等。5.1.2面向对象名词面向对象名词2.2.类类 类(class)是具有相同或相似性质的具体事物抽象化,类是对象的模板,对象是类的具体化,是对应类的一个具体实例。例如,“人”是一个类,而“张三”则是人类的一个具体实例化对象。类由“特征”和“行为”两部分组成,其中“特征”是对象状态的抽象,通常使用“变量”来描述类的特征,又称为“属性”;“行为”是对象操作的抽象,通常使用“方法”来描述类的行

8、为。类和对象需要在程序中定义并操作使用,其中对象的“属性”提供数据,而“方法”则对这些数据进行相应的操作处理,使开发者与数据隔离而无需获知数据的具体格式,从而使得数据得以保护。类和对象之间的关系如图5.1所示。5.1.2面向对象名词3.3.消息消息 消息是一个实例与另一个实例之间传递的信息,是对象之间进行通信的一种规格说明。它一般由三部分组成:(1)接收消息的对象的名称;(2)消息标识符,也称消息名;(3)零个或多个参数。例如,myCircle对象是一个半径为5cm、圆心位于(100,100)的Circle类的对象,也就收Circle类的一个实例,当要求它以红色在屏幕上显示时,在Java语言中

9、应该向它发送下列消息:myCircle.show(RED);其中,myCircle是接收消息的对象的名字,show是消息名,RED是消息的参数。5.1.3消息4.4.封装封装性性 封装(Encapsulation)是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接收哪些消息,具有哪些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象的使用者分开,使用者不必知晓行为实现的细节,只需要设计者提供的消息来访问该对象。在

10、面向对象语言中,通过访问控制机制实现封装,来控制对象的属性和方法的可访问性,Java语言中的访问控制级别有以下四种。(1)public:公共级别,对外公开。(2)protected:受保护级别,对同一个包的类或子类公开。(3)default:默认级别,对同一个包中的类公开。(4)private:私有级别,不对外公开,只在本类内部访问。通常类的属性定义为私有,方法定义为公有,这样,访问和修改对象属性时,只能通过方法来操作,以免对象的数据遭到滥用和破坏。5.1.3消息5.5.继承性继承性 继承(Inheritance)指子类自动继承父类的属性和方法,这是类之间的一种关系。在定义和实现一个子类的时候

11、,可以在一个父类的基础之上加入若干新的内容,原来父类中所定义的内容将自动作为子类的内容。例如,“人”这个类抽象了这个群体的基础特性,而“学生”和“老师”除了具备“人”所定义的基础特性之外,各自又具有各自的特殊性。如图5.2所示为父类和子类之间的继承关系。5.1.3消息6.6.多态性多态性 多态(Polymorphism)来自于希腊语,表示“多种形态”,是指相同的操作、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,即具有不同的表现行为,这种现象称为多态性。例如,定义一个几何图形类,它具有“绘图”行为,但是这个行为没有具体含义,不确定绘制的具体图形。再定

12、义“椭圆”和“多边形”两个类,它们都继承了“几何图形”类,同时也继承了“绘图”行为,当发送绘图消息时,椭圆对象绘制椭圆,多边形对象绘制多边形,产生了不同的行为。多态的好处是应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可,大大提高程序的可复用性。5.1.3消息第第2 2节节part类和对象 Java是面向对象的程序设计语言,使用Java语言定义类以及创建对象是其面向对象的核心和本质,也是Java成为面向对象语言的基础。面向对象思想本节概述 类(class)定义了一种新的数据类型,是具有相同特征(属性)和共同行为(方法)的一组对象的集合。类的声明就是定义一个类,其语法格式如下

13、:访问符 修饰符 class 类名 属性 方法 5.2.1类 的 声 明类的声明其中:访问符用于指明类、属性或方法的访问权限,可以是public(公共的)或默认的。修饰符用于指明所定义的类的特性,可以是abstract(抽象的)、final(最终的)或默认的,这些修饰符在定义类时不是必需的,需要根据类的特性进行使用。class是Java关键字,用于定义类。类名是指所定义类的名字,类名的命名与变量名一样必须符合命名规则,Java中的类名类名通常由一个或多个有意义的单词连缀而成,每个单词的首字母大写,其他字母小写。左右两个大括号括起的部分是类体。属性是类的数据成员(也称成员变量),用于描述对象的特

14、征。方法是类的行为(也称成员方法),是对象能够进行的操作。下述代码以人类为例,实现Person类的声明。【代码5.1】Person.javapackage com;public class Person/声明类/声明属性或成员变量private String name;private int age;private String address;/声明方法或成员方法public String getName()return name;public void setName(String name)this.name=name;public int getAge()return age;5.2.

15、1类 的 声 明public void setAge(int age)this.age=age;public String getAddress()return address;public void setAddress(String address)this.address=address;public void display()System.out.println(姓名:+name+年龄:+age+地址:+address);上述代码中定义了一个名为Person的类,它有三个属性,分别是name、age和address;而且对三个属性提供了对应的getXXX()和setXXX()方法,其

16、中getXXX()方法用于获取属性的值,而setXXX()方法用于设置属性的值;另外又提供了一个display()方法用于输出属性数据信息。Person类中声明的三个属性都是私有的,只能在类体之内进行访问,而方法都是公共的,在类体之外与可以访问。Person类的类图如图5.3所示。5.2.1类 的 声 明 实际上,我们通常建议不要将任何成员变量设定为公共的,而是对其访问权限修饰符设定为私有的,对他们的访问都应当通过相应的getXXX()和setXXX()方法来进行访问,这样的优点如下:(1)如果希望属性是只读的,可以只提供getXXX()方法而不提供setXXX()方法。(2)如果希望属性是只

17、写的,可以只提供setXXX()方法而不提供getXXX()方法。(3)如果希望属性是可读可写的,则同时提供getXXX()和setXXX()方法。(4)在使用setXXX()方法设定属性值时,可以对设定的值进行合法性检查。(5)在使用getXXX()方法获取属性值时,可以对数据值进行处理和转换,然后再返回属性值。下面示例展示setXXX()方法对输入信息的验证,代码如下所示。5.2.1类 的 声 明【代码5.2】GetSetExample.javapackage com;public class GetSetExample private String password;private in

18、t age;public String getPassword()return password;public void setPassword(String password)if(password.length()!=6)System.out.println(密码位数不对,要求六位密码);return;else this.password=password;5.2.1类 的 声 明 public int getAge()return age;public void setAge(int age)if(age 120&age 0)System.out.println(“你的年龄输入有误,要求

19、0120岁);return;else this.age=age;完成类的定义后,就可以使用这种新类型来创建该类的对象。创建对象需要通过关键new为其分配内存空间,其语法格式如下:类名 对象名=new 构造方法();例如:Person person=new Person();上面一行代码使用new关键字创建了Person类的一个对象person。new关键字为对象动态分配内存空间,并返回对它的一个引用,且将该内存初始化为默认值。创建对象也可以分开写,代码如下:Person person;/声明Person类型的对象person person=new Person();/使用new关键字创建对象,

20、给对象分配内存空间5.2.2对象的创建和使用对象的创建和使用 声明对象后,如果不想给对象分配内存空间,则可以使用“null”关键字给对象赋值,例如:Person person=null;“null”关键字表示“空”,用于标识一个不确定的对象,即该对象的引用为空。因此可以将null赋给引用类型变量,但不可以赋给基本类型变量。例如:private String name=null;/是正确的 private int age=null;/是错误的 null本身虽然能代表一个不确定的对象,但null不是对象,也不是类的实例。null的另外一个用途就是释放内存,在Java中,当某一个非null的引用类型

21、变量指向的对象不再使用时,若想加快其内存回收,可让其指向null,这样该对象将不再被使用,并由JVM拉结回收机制去回收。5.2.2对象的创建和使用 创建对象之后,接下来就可以使用该对象。通过使用对象运算符“.”,对象可以实现对自己的变量访问和方法的调用。使用对象大致有以下两个作用:访问对象的属性,即对象的实例变量,格式是“对象名.属性名”。访问对象的方法,格式是“对象名.方法名()”。如果访问权限允许,类里定义的成员变量和方法都可以通过对象来调用,例如:person.display();/调用对象的方法 下述代码示例Person对象的创建和使用过程。5.2.2对象的创建和使用package c

22、om;public class PersonExample public static void main(String args)/创建p1对象Person p1=new Person();p1.display();/创建p2对象Person p2=new Person();p2.setName(张三);p2.setAge(20);p2.setAddress(重庆南泉);p2.display();5.2.2对象的创建和使用【代码5.3】PersonExample.java程序运行结果如下:姓名:null 年龄:0 地址:null姓名:张三 年龄:20 地址:重庆南泉 对象数组就是一个数组中的

23、所有元素都是对象。声明对象数组与普通基本数据类型的数组格式一样,具体格式如下:类名 数组名=new 类名 数组长度;下面语句示例了创建一个长度为5的Person类的对象数组:Person arrayPerson=new Person 5 ;上面的语句也可以分成两行,等价于;Person arrayPerson;arrayPerson=new Person 5 ;5.2.3对象数组对象数组 由于对象数组中的每个元素都是对象,所以每个元素都需要单独实例化,即还需使用new关键字实例化每个元素,代码如下所示。arrayPerson0=new Person(李四,20,重庆);arrayPerson1

24、=new Person(张三,21,成都);arrayPerson2=new Person(王五,22,西安);arrayPerson3=new Person(周一,20,北京);arrayPerson4=new Person(唐二,21,上海);5.2.3对象数组 创建对象数组时也可以同时实例化数组中的每个元素对象,此时无须指明对象数组的长度,类似基本数据类型的数组静态初始化。示例代码如下Person arrayPerson=new Person new Person(李四,20,重庆),new Person(张三,21,成都),new Person(王五,22,西安),new Person

25、(周一,20,北京),new Person(唐二,21,上海);5.2.3对象数组也可以直接简化成如下代码:Person arrayPerson=new Person(李四,20,重庆),new Person(张三,21,成都),new Person(王五,22,西安),new Person(周一,20,北京),new Person(唐二,21,上海);下述代码示例对象数组的应用。【代码5.4】ObjectArrayExample.javapackage com;public class ObjectArrayExample public static void main(String arg

26、s)/创建对象数组Person arrayPerson=new Person(李四,20,重庆),new Person(张三,21,成都),new Person(王五,22,西安),new Person(周一,20,北京),new Person(唐二,21,上海);/变量对象数组 for(Person e:arrayPerson)e.display();5.2.3对象数组程序运行结果如下:姓名:李四 年龄:20 地址:重庆姓名:张三 年龄:21 地址:成都姓名:王五 年龄:22 地址:西安姓名:周一 年龄:20 地址:北京姓名:唐二 年龄:21 地址:上海 Java语言类中定义的变量包括成员变

27、量和局部变量两大类。成员变量定义在类体中,局部变量定义在成员方法中。成员变量又分为实例成员变量和类成员变量(全局变量或静态成员变量)。如果一个成员变量的定义前有static关键字,那么它就是类成员变量(静态成员变量),其他形式的成员变量都是实例成员变量。例如:class Test int a=45;/实例成员变量static int b=34;/类变量void show(int x)/方法参数也是局部变量int y=8;/局部变量5.2.4变量变量 成员变量和局部变量可以定义为Java语言中的任何数据类型,包括简单类型和引用类型。成员变量和局部变量的区别如下:成员变量可以定义在整个类体中的任意

28、位置,其有效性与它在类体中书写的先后位置无关,它的作用域是整个类;局部变量的作用域从定义它的位置开始,直到定义它的语句块结束。成员变量和局部变量可以重名,成员方法中访问重名的局部变量时,成员变量被隐藏。如果想在成员方法中访问重名的成员变量,需要在前面加关键字this。成员变量有默认值,但局部变量没有默认值。因此,在使用局部变量之前,必须保证局部变量有具体的值。5.2.4变量第第3 3节节part方法 类体中定义的方法分为实例成员方法、类成员方法(静态成员方法)和构造方法。方 法本节概述5.3.1方法的声明 方法是类的行为的体现,定义方法的语法格式如下所示:访问符 修饰符 方法名 (参数列表)/

29、方法体 其中:访问符用于指明方法的访问权限,可以是public(公共的)、protected(受保护的)、private(私有的)或默认的。修饰符用于指明所定义的方法的特性,可以是abstract(抽象的)、static(静态的)、final(最终的)或默认的,这些修饰符在定义类方法不是必需的,需要根据方法的特性进行使用。返回值类型是该方法运行后返回值的数据类型,如果一个方法没有返回值,则该方法的返回类型为void。方法名是指所定义方法的名字,方法名的命名与变量名一样必须符合命名规则,Java中的方法名通常由一个或多个有意义的单词连缀而成,第一个单词的首字母小写,其他单词的首字母大写,其他字母

30、小写。参数列表是方法运行所需要特定类型的参数。方法体是大括号括起来的部分,用于完成方法功能的实现。下面代码示例方法的声明和调用。方法的声明5.3.1方法的声明package com;public class MethodExample /定义一个公共的计算圆面积方法public double area(double rouble)return Math.PI*rouble*rouble;/定义一个私有的静态的求和方法private static int add(int a,int b)return a+b;/定义一个保护型最终的显示信息方法protected final void displa

31、y()System.out.println(Hello World);public static void main(String args)/静态方法通过类名直接调用 System.out.println(4+5=+MethodExample.add(4,5);MethodExample me=new MethodExample();System.out.println(半径为5的圆面积为:+me.area(5);me.display();【代码5.5】MethodExample.java程序运行结果如下:4+5=9半径为5的圆面积为:78.53981633974483Hello World

32、5.3.2方法的参数传递机制 方法的参数列表可以带参数,也可以不带参数,是否带参数根据定义方法的具体情况而定,通过参数可以给方法传递数据,例如:public void setAge(int age)this.age=age;上述代码定义了一个带参数的setAge()方法,参数在方法名的小括号内,一个方法可以带多个参数,多个参数之间使用逗号隔开,例如:private int add(int a,int b)return a+b;方法的参数传递机制5.3.2方法的参数传递机制 根据参数的使用场合,可以将参数分为“形参”和“实参”两种:形参是声明方法时给方法定义的形式上的参数,此时形参没有具体的数值

33、,形参前必须有数据类型,其格式是“方法名(数据类型 形参)”;实参是调用方法时程序给方法传递的实际数据,实参前面没有数据类型,其使用格式是“对象名.方法名(实参)”。形参本身没有具体的数值,需要实参将实际的数值传递给它之后才具有数值。实参和形参之间传递数值的方式有两种:值传递和引用传递。5.3.2方法的参数传递机制1.1.值值传递传递 值传递是将实参的值传递给形参,被调方法为形参创建一份新的内存拷贝来存储实参传递过来的值,然后再对形参进行数值操作。值传递时,实参和形参在内存中占不同的空间,当实参的值传递给形参后,两者之间将互不影响,因此形参值的改变不会影响原来实参的值。在Java中,当参数的数

34、据类型是基本数据类型时,实参和形参之间是按值传递的。下述代码示例参数的值传递。5.3.2方法的参数传递机制【代码5.6】ValueByCallExample.javapackage com;public class ValueByCallExample /定义显示交换参数值的方法 public void display(int a,int b)/交换参数a,b的值int temp=a;a=b;b=temp;System.out.println(display方法里a=+a+,b=+b);public static void main(String args)int a=2,b=8;ValueB

35、yCallExample vbc=new ValueByCallExample();vbc.display(a,b);System.out.println(调用display()方法后a=+a+,b=+b);运行结果如下所示:display方法里a=8,b=2调用display()方法后a=2,b=8 通过运行结果可以看出:main()方法中的实参a和b,在调用display()方法之前和之后,其值没有发生任何变化;而声明display()方法时的形参a和b,并不是main()方法中的实参a和b,只是main()方法中的实参a和b的复制品,在执行display()方法时形参值发生变化。5.3.

36、2方法的参数传递机制2.2.引用引用传递传递 引用传递时将实参的地址传递给形参,被调方法通过传递的地址获取其指向的内存空间,从而在原来的内存空间直接进行操作。引用传递时,实参和形参指向内存中的同一空间,因此当修改了形参的值时,实参的值也会改变。在Java中,当参数的数据类型是引用类型时,如类、数组,实参和形参之间会是按引用传递值的。下述代码示例参数的引用传递。5.3.2方法的参数传递机制【代码5.7】ReferenceByCallExample.javapackage com;class Mydata public int a;public int b;public class Referen

37、ceByCallExample public static void display(Mydata data)int temp=data.a;data.a=data.b;data.b=temp;System.out.println(在display方法里,a成员变量的值是:+data.a+b成员变量的值是:+data.b);public static void main(String args)Mydata md=new Mydata();md.a=6;md.b=9;System.out.println(调用display方法前,a成员变量的值是:+md.a+b成员变量的值是:+md.b);d

38、isplay(md);System.out.println(调用display方法后,a成员变量的值是:+md.a+b成员变量的值是:+md.b);运行结果如下所示:调用display方法前,a成员变量的值是:6 b成员变量的值是:9在display方法里,a成员变量的值是:9 b成员变量的值是:6调用display方法后,a成员变量的值是:9 b成员变量的值是:65.3.2方法的参数传递机制 通过执行结果可以看出,data对象的成员变量a和b在调用display()方法前后发生了变化,因为被传递的是一个对象,对象是引用类型,所以实参会将地址传递给形参,它们都指向内存同一个存储空间,此时的形参

39、相当于实参的别名,形参值的改变会直接影响到实参值的改变。5.3.3构 造 方 法 构造方法是类的一个特殊方法,用于创建对象是初始化对象中的属性值。它具有如下特点。(1)访问权限符一般是public,也可以是其他访问符。(2)没有返回值,也不能有void修饰符。(3)方法名称必须和类名相同。(4)如果没有定义构造方法,系统自动定义默认的构造方法,该构造方法不带参数,将类成员属性进行默认赋值;如果为类定义了构造方法,系统将不创建默认构造方法,而执行用户定义的构造方法。(5)构造方法可以重载,通过构造方法中参数个数不同、参数类型不同及顺序的不同实现构造方法的重载。(6)在生成类的对象时调用,一个类中

40、如果定义了多个构造方法,则根据参数自动选择调用相应的构造方法。构造方法定义的语法结构如下所示。访问符 构造方法名(参数列表)/初始化语句 构造方法5.3.3构 造 方 法【代码5.8】Person.javapackage com;public class Person/声明类 /声明属性或成 员变量 private String name;private int age;private String address;/声明构造方法 public Person()/不带参数的构造方法 public Person(String name,int age,String address)this.na

41、me=name;this.age=age;this.address=address;public void display()System.out.println(姓名:+name+年龄:+age+地址:+address);public static void main(String args)Person p1=new Person();p1.display();Person p2=new Person(李四,20,重庆南泉);p2.display();运行结果如下所示:姓名:null 年龄:0 地址:null姓名:李四 年龄:20 地址:重庆南泉5.3.3构 造 方 法 上述代码中为Per

42、son类增加了两个构造方法,一个是不带参数的构造方法,一个是带三个参数的构造方法。我们可以看出,通过不带参数的构造方法创建的对象,其属性赋予了默认值,通过带参数的构造方法创建的对象,其参数值赋给了对象属性值。由于构造方法三个参数名与类中定义的属性名相同,为了避免在赋值过程中产生混淆,所以使用“this”关键字进行区分。5.3.4方法的重载 在Java语言程序中,如果同一个类中包含了两个或两个以上方法的方法名相同,但参数列表不同,则被称为方法重载,方法的重载也是多态的一种。对于重载的方法,编译器是根据方法的参数来进行方法绑定的。根据方法重载的概念,也可以将方法重载分成三种类型,分别是参数类型的重

43、载、参数数量的重载和参数顺序的重载。参数类型的重载是当实现重载方法的参数个数相同时,而参数的类型不同;参数数量的重载是指实现重载的方法的参数数量不同;最后一种重载是相同参数数量的方法,但参数顺序不同。注意,方法的返回值类型不是方法签名的一部分,因此进行方法重载的时候,不能将返回值类型的不同当成两个方法的区别。方法重载必须遵守以下三条原则:(1)在同一个类中;(2)方法名相同 (3)方法的参数类型、个数及顺序至少有一项不同。下述代码示例了方法的重载,代码如下所示。方法的重载5.3.4方法的重载【代码5.9】OverloadExample.javaPackage com;public class

44、OverloadExample /计算正方形面积的方法 public int area(int a)return a*a;/计算圆面积的方法 public double area(double a)return Math.PI*a*a;/计算长方形面积的方法 public double area(int a,double b)return a*b;/计算圆柱体表面积的方法 public double area(double a,int b)return 2*Math.PI*a*a+2*Math.PI*a*b;public static void main(String args)Overloa

45、dExample oe=new OverloadExample();System.out.println(正方形面积为:+oe.area(5);System.out.println(圆面积为:+oe.area(5.0);System.out.println(长方形面积为:+oe.area(5,6.0);System.out.println(圆柱体表面积为:+oe.area(5.0,5);运行结果如下所示:正方形面积为:25圆面积为:78.53981633974483长方形面积为:30.0圆柱体表面积为:314.15926535897935.3.5static关键字 static用来修饰类的成员

46、变量和成员方法,同时与可以修饰代码块,表示静态的代码块。静态的成员变量和成员方法独立于类的对象,被类的所有实例共享。因此可不生成类的任何对象,直接通过类实现对静态成员的访问。当类加载后,Java虚拟机能根据类名在运行时数据区的方法区内找到它们。访问类的静态变量和静态方法时,可以直接通过类名访问,语法格式如下:类名.静态方法名(形参列表);类名.静态变量名;static关键字5.3.5static关键字 当Java虚拟机加载类时,静态代码块被一次性执行,称为加载时执行。若类中有多个静态代码块,JVM将按照它们出现的先后依次执行,且每个代码块只被执行一次。类的方法可以相互调用,但当一个方法定义为静

47、态方法时,它可以直接访问类的静态变量,调用类的静态方法,但不能直接访问类的非静态变量和调用类的非静态方法,只能通过生成类的对象,并通过该对象访问相应的变量和调用相应的方法。同时静态的方法不能以任何方式引用this和super关键字,因为静态方法独立于类的任何对象,因此静态方法必须被实现,而不能定义静态抽象方法。利用静态代码块可对static类变量赋值。下述示例示范了类的static方法、static变量以及static代码块的定义和使用。5.3.5static关键字【代码5.10】StaticDemoExample.javapackage com;class StaticText int a;

48、static int b;static /a=10;调试出错,静态块中不能访问非静态变量 b=15;/静态块中可以访问静态变量 System.out.println(这是StaticText类的静态语句块!);public static void display()/System.out.println(a=+a);静态方法中不能访问非静态变量 System.out.println(b=+(b+10);/静态方法中可以访问静态变量 public class StaticDemoExample public static void main(String args)StaticText.disp

49、lay();System.out.println(b=+StaticText.b);运行结果如下所示:这是StaticText类的静态语句块!b=25b=15 static成员最常见的例子是main()方法,因为在程序开始执行时必须调用主类的main()方法,JVM在运行main()方法时可以直接调用而不用创建主类对象,所以该方法被声明为static。5.3.6this关键字 this是Java语言中一个非常重要的关键字,用来表示当前实例。它可以出现在实例成员方法和构造方法中,但不可以出现在类成员方法中。this关键字有两种用法,其一是作用在成员方法和构造方法中,代表正在调用该方法的实例,如果

50、方法的参数和类中的成员变量重名时,必须使用this关键字,以区分实例变量和成员方法变量;如果方法的参数名和成员变量名不重名时,this可以省略。下述代码示例了this的第一种用法,示例代码如下。this关键字5.3.6this关键字【代码5.11】ThisFirstExample.javapackage com;public class ThisFirstExample private double length;private double width;private double height;public ThisFirstExample(double length,double w,d

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

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《Java程序设计教程》课件第五章:类和对象.pptx)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|