面向对象的概念 构造方法 this和static关键字 第三章 面向对象(上) 面向对象的概念 构造方法 this和static关键字 类与对象 内部类
✎ 学习目标 掌握类和对象相关知识 1 掌握 理解 了解 熟悉 2 理解面向对象思想 了解垃圾回收机制 4 3 熟悉Java帮助文档使用
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 面向对象的概念 类与对象 构造方法 this关键字 垃圾回收 ☞点击查看本小节知识架构 3.3 构造方法 ☞点击查看本小节知识架构 3.4 this关键字 垃圾回收 3.5 3.6 static关键字 ☞点击查看本小节知识架构 3.7 内部类 ☞点击查看本小节知识架构 3.8 Java的帮助文档 ☞点击查看本小节知识架构
知识架构 3.2 类与对象 返回目录 3.2.1 类的定义 3.2.2 对象的创建与使用 3.2.3 类的设计 3.2.4 类的封装
知识架构 3.3 构造方法 返回目录 3.3.1 构造方法的定义 3.3.2 构造方法的重载
知识架构 3.6 static关键字 3.6.1 静态变量 3.6.2 静态方法 3.6.3 静态代码块 3.6.4 单例设计模式 返回目录 3.6.1 静态变量 3.6.2 静态方法 3.6.3 静态代码块 3.6.4 单例设计模式
知识架构 3.7 内部类 返回目录 3.7.1 成员内部类 3.7.2 静态内部类 3.7.3 方法内部类
知识架构 3.8 Java的帮助文档 返回目录 3.8.1 Java的文档注释 3.8.2 JDK帮助文档的使用
3.1 面向对象的概念 什么是面向对象?
3.1 面向对象的概念 想一想 在程序中 如何表示这些事物? 在程序中,事物是用对象表示的。
3.1 面向对象的概念 面向对象是一种符合人类思维习惯的编程思想。 现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。 在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。 [点击播放视频]
3.1 面向对象的概念 面向对象的三大特征 封装性 继承性 多态性 是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,这就是封装思想 主要描述的是类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展 指在一个类中定义的属性和方法被其它类继承后,它们可以具有不同的数据类型或表现出不同的行为
3.2 类与对象 面向对象的编程思想力图在程序中对事物的描述与该事物在现实中的形态保持一致。为了做到这一点,面向对象的思想中提出两个概念,即类和对象。 类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。类和对象的关系如同玩具和玩具模型的关系。 [点击播放视频]
3.2 类与对象 3.2.1 类的定义 在面向对象的思想中最核心就是对象,为了在程序中创建对象,首先需要定义一个类。 3.2.1 类的定义 在面向对象的思想中最核心就是对象,为了在程序中创建对象,首先需要定义一个类。 类是对象的抽象,它用于描述一组对象的共同特征和行为 类中可以定义成员变量和成员方法,其中成员变量用于描述对象的特征,也被称作属性,成员方法用于描述对象的行为,可简称为方法。
3.2 类与对象 3.2.1 类的定义 接下来,通过一个案例来学习如何定义一个类,如例3-1所示。 [点击查看例3-1]
3.2 类与对象 3.2.2 对象的创建与使用 应用程序想要完成具体的功能,仅有类是远远不够的,还需要根据类创建实例对象。 在Java程序中可以使用new关键字来创建对象,具体格式如下: 例如,创建一个Person对象,具体示例如下: [点击播放视频]
3.2 类与对象 3.2.2 对象的创建与使用 “new Person()”用于创建Person类的一个实例对象,“Person p”则是声明了一个Person类型的变量p。中间的等号用于将Person对象在内存中的地址赋值给变量p,这样变量p便持有了对象的引用。 变量p和对象之间的引用关系如下图所示。
3.2 类与对象 3.2.2 对象的创建与使用 在创建Person对象后,可以通过对象的引用来访问对象所有的成员,具体格式如下: 接下来,通过一个案例来演示对象的创建与使用,如例3-2所示。 [点击查看例3-2]
3.2 类与对象 3.2.2 对象的创建与使用 针对不同类型的成员变量,Java虚拟机会赋予不同的初始值
3.2 类与对象 3.2.2 对象的创建与使用 当对象被实例化后,在程序中可以通过对象的引用变量来访问该对象的成员。当没有任何变量引用这个对象时,它将成为垃圾对象,不能再被使用。 情况1:变量超出作用域变为垃圾对象
3.2 类与对象 3.2.2 对象的创建与使用 情况2:将变量的值赋为null。 接下来,通过一个案例演示情况2,如例3-3所示。 [点击查看例3-3]
3.2 类与对象 3.2.3 类的设计 假设要在程序中描述一个学校所有学生的信息,可以先设计一个学生类(Student),在这个类中定义两个属性name、age分别表示学生的姓名和年龄,定义一个方法introduce()表示学生做自我介绍。 接下来,根据上面的描述,设计一个Student类,设计出来的Student类如例3-4所示。 [点击查看例3-4]
3.2 类与对象 3.2.4 类的封装 类的封装是指在定义一个类时,进行下列操作: (1)将类中的属性私有化,即使用private修饰属性 (2)在类中提供公用的可以获取属性值的getXxx方法 (3)在类中提供公用的可以设置属性值的setXxx方法 [点击播放视频]
3.2 类与对象 3.2.4 类的封装 接下来,针对例3-4中设计的Student类创建对象,并访问该对象的成员,具体如例3-5所示。 [点击查看例3-5] [点击查看例3-6]
3.3 构造方法 3.3.1 构造方法的定义 在一个类中定义的方法如果同时满足以下三个条件,该方法称为构造方法,具体如下: (1)方法名和类名相同 (2)方法名的前面没有返回值类型的声明 (3)方法中不能使用return语句返回一个值 [点击播放视频]
3.3 构造方法 3.3.1 构造方法的定义 对构造方法的特点有所了解后,接下来,通过一个案例来演示如何在类中定义构造方法,具体如例3-7所示。 在一个类中,除了可以定义无参的构造方法,也可以定义有参的构造方法,通过有参的构造方法可以实现对属性的赋值,接下来,对例3-7进行改写,改写后的代码如例3-8所示。 [点击查看例3-7] [点击查看例3-8]
3.3 构造方法 3.3.2 构造方法的重载 和普通方法一样,构造方法也可以重载 在一个类中可以定义多个构造方法,只要每个构造方法的参数类型或参数个数不同即可。 在创建对象时,可以通过调用不同的构造方法为不同的属性赋值 [点击播放视频]
3.3 构造方法 3.3.2 构造方法的重载 接下来,通过一个案例来学习构造方法的重载,具体如例3-9所示 [点击查看例3-9]
脚下留心 在Java中的每个类至少都有一个构造方法,如果在一个类中没有定义构造方法,系统会自动为这个类创建一个默认的构造方法,这个默认的构造方法没有参数,在其方法体中没有任何代码,即什么都不做。下列程序中Person类的两种写法效果是完全一样的 第一种写法: 第二种写法:
脚下留心 当为某个类定义了有参数的构造方法后,这时,系统就不再提供默认的构造方法,接下来,通过一个案例来测试,如例3-10所示。 思考,声明构造方法时,可以使用private访问修饰符吗?接下来,通过一个案例来演示,如例3-11所示。 [点击查看例3-10] [点击查看例3-11]
脚下留心 在Java中的每个类都至少有一个构造方法,如果在一个类中没有定义构造方法,系统会自动为这个类创建一个默认的构造方法,这个默认的构造方法没有参数,在其方法体中没有任何代码,即什么也不做。 如果一个类中定义了构造方法,系统就不再提供默认的构造方法了
3.4 this关键字 this关键字的用法 1、通过this关键字可以明确地去访问一个类的成员变量,解决与 局部变量名称冲突的问题,具体示例如下: 构造方法的参数被定义为age,它是一个局部变量,在类中还定义了一个成员变量,名称也是age。在构造方法中如果使用“age”,则是访问局部变量,但如果使用“this.age”则是访问成员变量 [点击播放视频]
3.4 this关键字 this关键字的用法 2、通过this关键字调用成员方法 在上面的代码中,构造方法的参数被定义为age,它是一个局部变量,在类中还定义了一个成员变量,名称也是age。在构造方法中如果使用“age”,则是访问局部变量,但如果使用“this.age”则是访问成员变量
3.4 this关键字 this关键字的用法 3、构造方法是在实例化对象时被Java虚拟机自动调用的,在程序中不能像调用其它方法一样去调用构造方法,但可以在一个构造方法中使用“this([参数1,参数2…])”的形式来调用其它的构造方法。 接下来通过一个案例来演示,如例程3-12所示。 [点击查看例3-12]
3.4 this关键字 注意事项: 1、只能在构造方法中使用this调用其它的构造方法
3.5 垃圾回收 对象成为垃圾后仍会占用内存空间,时间一长,就会导致内存空间的不足,针对这种情况,Java中引入了垃圾回收机制。 除了等待Java虚拟机进行自动垃圾回收,也可以通过调用System.gc()方法来通知Java虚拟机立即进行垃圾回收。
3.5 垃圾回收 当一个对象在内存中被释放时,它的finalize()方法会被自动调用 接下来,通过一个案例来演示Java虚拟机进行垃圾回收的过程,具体如例3-13所示。 [点击查看例3-13]
3.6 static关键字 3.6.1 静态变量 在一个Java类中,可以使用static关键字来修饰成员变量,该变量被称作静态变量 静态变量被所有实例共享,可以使用“类名.变量名”的形式来访问 static关键字只能用于修饰成员变量,不能用于修饰局部变量,否则编译会报错,下面的代码是非法的。 [点击播放视频]
3.6 static关键字 3.6.1 静态变量 接下来,通过一个案例来演示静态变量的用法,具体如例3-14所示。 [点击查看例3-14]
3.6 static关键字 3.6.2 静态方法 被static关键字修饰的方法称为静态方法 同静态变量一样,静态方法可以使用“类名.方法名”的方式来访问,也可以通过类的实例对象来访问。 在一个静态方法中只能访问用static修饰的成员,原因在于没有被static修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象。 [点击播放视频]
3.6 static关键字 3.6.2 静态方法 接下来,通过一个案例来学习静态方法的使用,如例3-15所示。 [点击查看例3-15]
3.6 static关键字 3.6.3 静态代码块 在Java中,使用一对大括号包围起来的若干行代码被称为一个代码块。 当类被加载时,静态代码块会执行,并且只会执行一次。 在程序中,经常使用静态代码块来对类的成员变量进行初始化。 [点击播放视频]
3.6 static关键字 3.6.3 静态代码块 接下来,通过一个案例来学习静态代码块的用法,具体如例3-16所示。 [点击查看例3-16]
3.6 static关键字 3.6.4 单例模式 设计模式就是针对这些问题和需求,在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式 单例模式是Java中的一种设计模式,它是指在设计一个类时,需要保证在整个程序运行期间针对该类只存在一个实例对象 [点击播放视频]
3.6 static关键字 3.6.4 单例模式 掌握了单例模式的相关知识后,接下来,通过一个案例来实现单例模式,如例3-17所示。 编写一个测试类对实现了单例的Single类进行测试,具体代码如例3-18所示。 [点击查看例3-17] [点击查看例3-18]
多学一招 3.6.4 单例模式 单例模式还可以写成其他形式,具体如例3-19所示。 [点击查看例3-19]
3.7 内部类 3.7.1 成员内部类 在一个类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作成员内部类。 在成员内部类中可以访问外部类的所有成员 如果想通过外部类去访问内部类,则需要通过外部类对象去创建内部类对象,创建内部类对象的具体语法格式如下: [点击播放视频]
3.7 内部类 3.7.1 成员内部类 接下来,通过一个案例来演示成员内部类的使用,如例3-20所示。 对例3-20定义的Outer类写一个测试程序,如例3-21所示。 [点击查看例3-20] [点击查看例3-21]
3.7 内部类 3.7.2 静态内部类 使用static关键字来修饰一个成员内部类,该内部类被称作静态内部类,它可以在不创建外部类对象的情况下被实例化。 创建静态内部类对象的具体语法格式如下: [点击播放视频]
3.7 内部类 3.7.2 静态内部类 接下来,通过一个案例来演示静态内部类的用法,如例3-22所示。 [点击查看例3-22]
3.7 内部类 3.7.3 方法内部类 方法内部类是指在成员方法中定义的类,它只能在当前方法中被使用。 接下来,通过一个案例来演示方法内部类的使用,如例3-23所示。 [点击播放视频] [点击查看例3-23]
3.8 Java的帮助文档 3.8.1 Java的文档注释 文档注释用于是嵌入到程序当中的帮助信息,用于说明如何使用当前程序,它以“/**”开头,以“*/”标志结束 Java中提供了javadoc命令,它可以将这些帮助信息提取出来,自动生成HTML格式的帮助文档,从而实现程序的文档化
3.8 Java的帮助文档 3.8.1 Java的文档注释 接下来,就为大家演示如何使用javadoc命令生成帮助文档,首先需要定义一个Person类,在Person类中定义一个构造方法和一个read()方法,具体如例3-24所示。 在定义好的Person类中加入文档注释,修改后的代码如例3-25所示。 [点击查看例3-24] [点击查看例3-25]
3.8 Java的帮助文档 3.8.1 Java的文档注释 为程序添加文档注释后,便可以使用javadoc命令生成Person类的帮助文档。打开命令行窗口,进入程序所在的目录,输入生成文档的命令,具体如下所示: 其中: -d 用来指定输出文档存放的目录 . 表示当前的目录 -version 用来指定输出文档中需包含版本信息 -author 用来指定输出文档中需包含作者信息
3.8 Java的帮助文档 3.8.2 JDK帮助文档的使用 JDK帮助文档是Oracle公司针对JDK中所有的Java类提供的一整套帮助文档,它详细介绍了所有Java类的属性、方法、继承关系和示例用法等内容 JDK帮助文档通常有两种,一种是Oracle公司官方发布的HTML格式的JDK帮助文档,一种是由一些Java爱好者根据官方文档制作而成的CHM格式的JDK帮助文档。
本章小结 本章详细介绍了面向对象的基础知识,包括什么是面向对象、类和对象之间的关系、类的封装与使用、构造方法的定义与重载、this关键字、static关键字、内部类等 重点在于面向对象的编程思想、类和对象、类的封装、构造方法以及this关键字的使用,大家应该多思考,深刻领会面向对象的好处 熟练掌握好这些知识,有助于学习下一章的内容。深入理解面向对象的思想,对以后的实际开发也是大有裨益的