第3章 面向对象 (上)

Posted csah

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第3章 面向对象 (上)相关的知识,希望对你有一定的参考价值。

本章重点

·面向对象的概念

·类与对象

·构造方法

·this和static关键字

·内部类

 

3.1 面向对象的概念

面向对象:在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之前的联系。

1.封装性

封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节。

2.继承性

主要是描述的是类与类之间的关系,通过继承,可以在无须重新编写原有类的情况下,对原有类的功能进行扩展。

继承不仅增强了代码复用性,提高了开发效率,而且为程序的修改补充提供了便利。

3.多态性

指的是在程序中允许出现重名现象,它指在一个类中定义的属性和方法被其它类继承后,他们可以具有不同数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义。

 

 

3.2 类与对象

面向对象的思想中提出两个概念,既类和对象。

类是对某一类事务的抽象描述,而对象用于表现现实中该类事物的个体。

类用于描述多个对象的共同特征,它是对象的模板。对象用于描述现实中的个体,它是类的实例。

 

3.2.1 类的定义

 类是对象的抽象,它用于描述一组对象的共同特征和行为。

成员变量用于描述对象的特征,也被称作属性;成员方法用于描述对象的行为,可见简称为方法。

At:在类中定义的变量被称为成员变量;定义在方法中的变量称为局部变量。

 

3.2.2 对象的创建与使用

 在Java程序中可以使用new关键字来创建对象,具体格式如下:

Fm:类名 对象名称 = new 类名();

例如,创建Person类的实例对象代码如下:

Person p = new Person();

变量p引用的对象简称为p对象.

通过对象的引用来访问对象所有的成员,具体格式如下:

Fm: 对象引用.对象成员,通过一个例子来说明如何访问对象的成员

 技术图片

 

在实例化对象时,Java虚拟机会自动为成员变量进行初始化,针对不同类型的成员变量,Java虚拟机会赋予不同的初始值。如下表所示

 技术图片

 

3.2.3 类的设计

对象是通过类创建出来的。

 

 技术图片

 

3.2.4 类的封装

所谓类的封装是指在定义一个类时,将类中的属性私有化,即使用private关键字来修饰,私有属性只能在它所在类中被访问。

 

 

 

3.3 构造方法

3.3.1 构造方法的定义

(1)方法名与类名相同

(2)在方法名的前面没有返回值类型的声明

(3)在方法中不能使用return语句返回一个值

3.3.2 构造方法的重载

构造方法也可以重载,在一个类中可以定义多个构造方法,只要每个构造方法的参数类型或参数个数不同即可。

 

At: 在Java中的每个类都至少有一个构造方法,如果在一个类中没有定义构造方法,系统就会自动为这个类创建一个默认的构造方法,这个默认的构造方法没有参数,在某方法体中没有任何代码,即什么都不做;

下面程序中的Person类的两种写法效果是完全一样的.

 

 技术图片

 

为了方便实例化对象,构造方法通常会使用public来修饰;

3.4 this关键字

关键字this,用于在方法中访问对象的其他成员。

(1)    通过this关键字可以明确地去访问一个类的成员变量,解决与局部变量名称冲突问题。

 技术图片

 

(2)    通过this关键字调用成员方法。

 技术图片

 

(3)    构造方法是在实例化对象时被Java虚拟机自动调用的,在程序中不能像调用其他方法一样去调用构造方法,但可以在一个构造方法中使用”this([参数1,参数2……])”的形式来调用其他的构造方法。

 技术图片

 

 

在使用this调用类的构造方法时,应注意以下几点

(1)    只能在构造方法中使用this调用其他的构造方法,不能在成员方法中使用

(2)    在构造方法中,使用this调用构造方法的语句必须位于第一行,且只能出现一次。

(3)    不能在一个类的两个构造方法中使用this互相调用

 

3.5 垃圾回收

Java垃圾回收机制——在Java中,当一个对象成为垃圾后仍会占用内存空间,时间一长,就会导致内存空间的不足。

当一个对象在内存中被释放时,它的finalize()方法会被自动调用,因此可以在类中通过定义finalize()方法来观察对象何时被释放。

除了等待Java虚拟机进行自动垃圾回收,也可以通过调用System.gc()方法来通知Java虚拟机立即进行垃圾回收。

 

3.6 static关键字

3.6.1 静态变量

在一个Java类中,可以使用static关键字来修饰成员变量,改变了被称作静态变量;静态变量被所有实例共享,可以使用”类名.变量名”的形式来访问。

At:static关键字只能用于修饰成员变量,不能用于修饰局部变量,否则编译会报错。

 

 技术图片

 

3.6.2 静态方法

静态方法:只需要在类中定义的方法前加上static关键字

静态方法可以使用”类名.方法名”的方式来访问,也可以通过类的实例对象来访问

静态方法不需要创建对象就可以调用

At:在一个静态方法中只能访问用static修饰的成员,原因在于没有被static修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象、

 

3.6.3 静态代码块

在Java类中,使用一对大括号包围起来的若干行代码被称为一个代码块,用static关键字修饰的代码块称为静态代码块;当累被加载时,静态代码块会执行,由于类只加载一次,因此静态代码块只执行一次。

 

3.6.4 单例模式

单例模式是Java中的一种设计模型,它是指在设计一个类时,需要保证在整个程序运行期间针对该类只存在一个实例对象。

 

被关键字final修饰的变量为常量,其值不可改变。

 

 

3.7内部类

在Java中,允许在一个累的内部定义类,这样的类称作内部类,这个内部类所在的类所在外部类。 根据内部类的位置、修饰符和定义可分为成员内部类、静态内部类、方法内部类。

3.7.1 成员内部类

在一个类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作成员内部类。

内部类可以在外部类中被使用,并能访问外部类的成员。

创建内部类对象的具体语法格式如下:

Fm: 外部类名.内部类名 变量名 = new 外部类名(). new 内部类名();

 

3.7.2 静态内部类

可以使用static关键字来修饰一个成员内部类,该内部类被称作静态内部类。

创建静态内部类对象的具体语法:

Fm: 外部类名.内部类名 = new 外部类名.内部类名();

 

At: (1) 在静态内部类中只能访问外部类的静态成员

(2) 在静态内部类中可以定义静态的成员,而在非静态的内部类中不允许定义静态的成员。

 

3.7.3 方法内部类

方法内部类是指在成员方法中定义的类,它只能在当前方法中被调用

 

3.8 Java的帮助文档

 

3.8.1 Java的文档注释

3.8.2 JDK帮助文档的使用

以上是关于第3章 面向对象 (上)的主要内容,如果未能解决你的问题,请参考以下文章

王之泰《面向对象程序设计(java)》课程学习总结

Java面向对象程序设计第14章3-8和第15章6

201771010130 王志成《面向对象程序设计(java)》第十八周学习总结

第 四 - 六 章 面向对象

第8章 面向对象编程

第11章(上)--面向对象编程(高级特性)