书签 分享 收藏 举报 版权申诉 / 81
上传文档赚钱

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

  • 上传人(卖家):momomo
  • 文档编号:7669045
  • 上传时间:2024-06-23
  • 格式:PPTX
  • 页数:81
  • 大小:3.60MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《《Java程序设计教程》课件第五章:类和对象.pptx》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Java程序设计教程 Java 程序设计 教程 课件 第五 对象
    资源描述:

    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

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《Java程序设计教程》课件第五章:类和对象.pptx
    链接地址:https://www.163wenku.com/p-7669045.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


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

    163文库