文章目录
第四章面向对象(上)
1面向对象与面向过程
面向过程(POP) 与 面向对象(OOP)
- 二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
- 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。
- 面向对象的三大特征
- 封装 (Encapsulation)
- 继承 (Inheritance)
- 多态 (Polymorphism)
面向对象:Object Oriented Programming
面向过程:Procedure Oriented Programming
面向对象的思想概述
- 程序员从面向过程的执行者转化成了面向对象的指挥者
- 面向对象分析方法分析问题的思路和步骤:
- 根据问题需要,选择问题所针对的现实世界中的实体。
- 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
- 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。
- 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。
2 Java基本元素:类和对象
- 类(Class)和对象(Object)是面向对象的核心概念。
- 类是对一类事物的描述,是抽象的、概念上的定义
- 对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
- “万事万物皆对象”
-
可以理解为:类 = 抽象概念的人;对象 = 实实在在的某个人
-
面向对象程序设计的重点是类的设计
-
类的设计,其实就是类的成员的设计
-
现实世界的生物体,大到鲸鱼,小到蚂蚁,都是由最基本的细胞构成的。同理,Java代码世界是由诸多个不同功能的类构成的。
-
现实生物世界中的细胞又是由什么构成的呢?细胞核、细胞质、… 那么,Java中用类class来描述事物也是如此。常见的类的成员有:
- 属 性:对应类中的成员变量
- 行 为:对应类中的成员方法
Field = 属性 = 成员变量,Method = (成员)方法 = 函数
2.1 Java类及类的成员
2.2 类的语法格式
对象的创建和使用
3.1 创建Java自定义类
步骤:
- 定义类(考虑修饰符、类名)
- 编写类的属性(考虑修饰符、属性类型、属性名、初始化值)
- 编写类的方法(考虑修饰符、返回值类型、方法名、形参等)
- 创建对象语法: 类名 对象名 = new 类名();
- 使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)
public class Zoo {
public static void main(String args[]) {
Animal xb = new Animal();
Animal xh = new Animal();
xb.legs = 4;
xh.legs = 0;
System.out.println(xb.legs); // 4
System.out.println(xh.legs); // 0
xb.legs = 2;
System.out.println(xb.legs); // 2
System.out.println(xh.legs); // 0
} }
说明:
如果创建了一个类的多个对象,对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰。
3.2 对象的生命周期
3.3 内存解析
- 堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象
实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。 - 通常所说的栈(Stack),是指虚拟机栈。虚拟机栈用于存储局部变量等。
局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char 、 short 、 int 、 float 、 long 、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。 方法执行完,自动释放。 - 方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
3.4 匿名对象
- 我们也可以不定义对象的句柄,而直接调用这个对象的方法。这
样的对象叫做匿名对象。- 如:new Person().shout();
- 使用情况
- 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
- 我们经常将匿名对象作为实参传递给一个方法调用。