电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

java基础第3章幻灯片

45页
  • 卖家[上传人]:F****n
  • 文档编号:88278615
  • 上传时间:2019-04-22
  • 文档格式:PPT
  • 文档大小:865KB
  • / 45 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、第三章 面向对象(上),面向对象的概念 构造方法 this和static关键字,类与对象 内部类,思考:可以定义什么?,3.1 面向对象的概念,面向对象是一种符合人类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。 面向过程就是分析解决问题所需要的步骤,面向对象则是把解决的问题按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。 面向对象的特点主要可以概括为封装性、继承性和多态性。,3.2 类与对象,面向对象的编程思想力图在程序中对事物的描述与该事物在现实中的形态保持一致。为了做到这一点,面向对象的思想中提出两个概念,即类和对象。 类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。类和对象的关系如同玩具和玩具模型的关系。,可以将玩具模型看作是一个类,将一个个玩具看作对象,从玩具模型和玩具之间的关系便可以看出类与对象之间的关系。类用于描述多个对象的共同特征,它是对象的模板。对象用于描述现实中的个体,它是类的实例,并且一个类可以

      2、对应多个对象,3.2 类与对象,3.2.1 类的定义 在面向对象的思想中最核心就是对象,为了在程序中创建对象,首先需要定义一个类。类是对象的抽象,它用于描述一组对象的共同特征和行为 类中可以定义成员变量和成员方法,其中成员变量用于描述对象的特征,也被称作属性,成员方法用于描述对象的行为,可简称为方法,3.2 类与对象,3.2.1 类的定义 定义一个Person类 Person是类名,age是成员变量,speak()是成员方法。在成员方法speak()中可以直接访问成员变量age。,3.2.2 对象的创建与使用 应用程序想要完成具体的功能,仅有类是远远不够的,还需要根据类创建实例对象。 在Java程序中可以使用new关键字来创建对象,具体格式如下: 例如,创建一个Person对象,具体示例如下:,3.2 类与对象,3.2 类与对象,3.2.2 对象的创建与使用 “new Person()”用于创建Person类的一个实例对象,“Person p”则是声明了一个Person类型的变量p。中间的等号用于将Person对象在内存中的地址赋值给变量p,这样变量p便持有了对象的引用,变量p和对象之

      3、间的引用关系如下图所示。,3.2 类与对象,3.2.2 对象的创建与使用 在创建Person对象后,可以通过对象的引用来访问对象所有的成员,具体格式如下: 看一个例子,具体如下:,3.2 类与对象,3.2.2 对象的创建与使用 在例程3-2中,通过“p1.age=18”将p1对象的age属性赋值为18,没有对p2对象的age属性进行赋值,但p2对象的age属性也是有值的,其值为0。这是因为在针对不同类型的成员变量,Java虚拟机会赋予不同的初始值,3.2 类与对象,3.2.2 对象的创建与使用 当对象被实例化后,在程序中可以通过对象的引用变量来访问该对象的成员。当没有任何变量引用这个对象时,它将成为垃圾对象,不能再被使用。 情况1:变量超出作用域变为垃圾对象,3.2 类与对象,3.2.2 对象的创建与使用 情况2:变量的值变为null 运行结果,在例程3-3中,创建了一个Person类的实例对象,并两次调用了该对象的say()方法。第一次调用say()方法时可以正常打印,但在第10行代码中将变量p2的值置为null,当再次调用say()方法时抛出了空指针异常。在Java中,null是一

      4、种特殊的常量,当一个变量的值为null时,则表示该变量不指向任何一个对象。在例程中,当把变量p2置为null时,被p2所引用的Person对象就会失去引用,成为垃圾对象,3.2 类与对象,3.2.3 类的设计 假设要在程序中描述一个学校所有学生的信息,可以先设计一个学生类(Student),在这个类中定义两个属性name、age分别表示学生的姓名和年龄,定义一个方法introduce()表示学生做自我介绍。根据上面的描述设计出来的Student类如例程3-4所示,3.2 类与对象,3.2.4 类的封装 先来看一个例子,具体如下: 运行结果,在例程3-5的第5行代码中,将年龄赋值为一个负数-30,这在程序中不会有任何问题,但在现实生活中明显是不合理的。为了解决年龄不能为负数的问题,在设计一个类时,应该对成员变量的访问作出一些限定,不允许外界随意访问。这就需要实现类的封装。,3.2 类与对象,3.2.4 类的封装 所谓类的封装是指在定义一个类时,将类中的属性私有化,即使用private关键字来修饰,私有属性只能在它所在类中被访问,为了能让外界访问私有属性,需要提供一些使用public修饰的

      5、公有方法,其中包括用于获取属性值的getXxx方法和设置属性值的setXxx方法,3.2 类与对象,3.2.4 类的封装,使用private关键字将属性name和age声明为私有 getName()方法用于获取name属性的值,setName()方法用于设置name属性的值 getAge()和setAge()方法用于获取和设置age属性的值。在setAge()方法中对参数stuAge的值进行检查,,3.3 构造方法,3.3.1 构造方法的定义 在一个类中定义的方法如果同时满足以下三个条件,该方法称为构造方法,具体如下: 方法名和类名相同 方法名的前面没有返回值类型的声明 方法中不能使用return语句返回一个值,3.3 构造方法,3.3.1 构造方法的定义,在例程3-7的Person类中定义了一个无参的构造方法Person()。从运行结果可以看出,Person类中无参的构造方法被调用了。这是因为第9行代码在实例化Person对象时会自动调用类的构造方法,“new Person()”语句的作用除了会实例化Person对象,还会调用构造方法Person(),3.3 构造方法,3.3.1 构

      6、造方法的定义 在一个类中除了定义无参的构造方法,还可以定义有参的构造方法,通过有参的构造方法就可以实现对属性的赋值,例程3-8的Person类中定义了有参的构造方法Person(int a)。第13行代码中的“new Person(20)”会在实例化对象的同时调用有参的构造方法,并传入了参数20。在构造方法Person(int a)中将20赋值给对象的age属性。通过运行结果可以看出,Person对象在调用speak()方法时,其age属性已经被赋值为20。,3.3 构造方法,3.3.2 构造方法的重载 与普通方法一样,构造方法也可以重载,在一个类中可以定义多个构造方法,只要每个构造方法的参数类型或参数个数不同即可,例程3-9的Person类中定义了两个构造方法,它们构成了重载。在创建p1对象和p2对象时,根据传入参数的不同,分别调用不同的构造方法。从程序的运行结果可以看出,两个构造方法对属性赋值的情况是不一样的,其中一个参数的构造方法只针对name属性进行赋值,这时age属性的值为默认值0。,脚下留心,在Java中的每个类都至少有一个构造方法,如果在一个类中没有定义构造方法,系统会自

      7、动为这个类创建一个默认的构造方法,这个默认的构造方法没有参数,在其方法体中没有任何代码,即什么也不做。 下面程序中Person类的两种写法效果是完全一样的。,脚下留心,如果为该类定义了构造方法,系统就不再提供默认的构造方法了 运行结果,从图3-12可以看出程序在编译时报错,其原因是调用new Person()创建Person类的实例对象时,需要调用无参的构造方法,而我们并没有定义无参的构造方法,只是定义了一个有参的构造方法,系统将不再自动生成无参的构造方法,3.4 this关键字,1、通过this关键字可以明确地去访问一个类的成员变量,解决与局部变量名称冲突问题,具体示例如下: 在上面的代码中,构造方法的参数被定义为age,它是一个局部变量,在类中还定义了一个成员变量,名称也是age。在构造方法中如果使用“age”,则是访问局部变量,但如果使用“this.age”则是访问成员变量。,3.4 this关键字,2、通过this关键字调用成员方法,具体示例代码如下: 在上面的speak()方法中,使用this关键字调用openMouth()方法。注意,此处的this关键字可以省略不写,也就是

      8、说上面的第6行代码写成“this.openMouth()”和“openMouth()”,效果是完全一样的,3.4 this关键字,3、构造方法是在实例化对象时被Java虚拟机自动调用的,在程序中不能像调用其它方法一样去调用构造方法,但可以在一个构造方法中使用“this(参数1,参数2)”的形式来调用其它的构造方法通过this关键字调用成员方法,3.4 this关键字,注意: 1、只能在构造方法中使用this调用其它的构造方法 2、在构造方法中,使用this调用构造方法的语句必须位于第一行,且只能出现一次,下面的写法是非法的。 3、不能在一个类的两个构造方法中使用this互相调用,3.5 垃圾回收,当一个对象成为垃圾后仍会占用内存空间,时间一长,就会导致内存空间的不足。针对这种情况,Java中引入了垃圾回收机制 Java虚拟机就会启动垃圾回收器将这些垃圾对象从内存中释放,从而使程序获得更多可用的内存空间 除了等待Java虚拟机进行自动垃圾回收,也可以通过调用System.gc()方法来通知Java虚拟机立即进行垃圾回收。当一个对象在内存中被释放时,它的finalize()方法会被自动调用

      9、,3.5 垃圾回收,在例程3-13的Person类中定义了一个finalize()方法,该方法的返回值必须为void,并且要使用public来修饰。在main()方法中创建了两个对象p1和p2,然后将两个变量置为null,这意味着新创建的两个对象成为垃圾了,紧接着通过“System.gc()”语句通知虚拟机进行垃圾回收。从运行结果可以看出,虚拟机针对两个垃圾对象进行了回收,并在回收之前分别调用两个对象的finalize()方法。,3.6 static关键字,3.6.1 静态变量 在一个Java类中,可以使用static关键字来修饰成员变量,该变量被称作静态变量 静态变量被所有实例共享,可以使用“类名.变量名”的形式来访问 static关键字只能用于修饰成员变量,不能用于修饰局部变量,否则编译会报错,下面的代码是非法的。,3.6 static关键字,3.6.1 静态变量,例程3-14的Student类中定义了一个静态变量schoolName,用于表示学生所在的学校,它被所有的实例所共享。由于schoolName是静态变量,因此可以直接使用Student.schoolName的方式进行调用,也可以通过Student的实例对象进行调用,如stu2.schoolName。在第8行代码将变量schoolName赋值为“黄淮学院”,通过运行结果可以看出学生对象stu1和stu2的schoolName属性均为“黄淮学院”。,“黄淮学院”;,3.6 static关键字,3.6.2 静态方法 被static关键字修饰的方法称为静态方法 同静态变量一样,静态方法可以使用“类名.方法名”的方式来访问,也可以通过类的实例对象来访问。 在一个静态方法中只能访问用static修饰的成员,原因在于没有被static修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象。,3.6 static关键字,3.6.2 静态方法,例程3-15的Person类中定义了静态方法sayHello(),在第8行代码处通过“Person.sayHello()”的形式调用了静态方法,由此可见静态方法不需要创建对象就可以调用。,3.6 static关键字,3.6.3 静态代码块 在Java类中,使用一对大括号包围起来的若干

      《java基础第3章幻灯片》由会员F****n分享,可在线阅读,更多相关《java基础第3章幻灯片》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.