第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章 面向对象 (上)的主要内容,如果未能解决你的问题,请参考以下文章