面向对象概
面向对象编程 OOP(Object Oriented Programming)是当今主流的程序设计思想,已经取代了过程化程序开发技术,Java 是完全面向对象编程语言,所以必须熟悉面向对象才能够编写 Java 程序。
对象是Java程序的核心,在Java程序中“万事万物皆为对象”
面向对象有以下特点:
(1)面向对象是一种常见的思想,比较符合人们的思考习惯;
(2)面向对象可以将复杂的业务逻辑简单化,增强代码复用性;
(3)面向对象具有抽象、封装、继承、多态等特性。
面向对象的编程语言主要有:C++、Java、C#等。
思考:如何面向对象编程?
面向过程
分析解决问题的所需要的步骤,然后我们用方法来一步步的调用实现
-
举例1:把大象放入冰箱
(1)打开冰箱门
(2)将大象放入冰箱
(3)关上冰箱门
-
举例2:象棋游戏设计分析
(1)开始游戏
(2)绘制棋盘
(3)红方走棋
(4)绘制棋盘
(5)判断输赢
(6)黑方走棋
(7)绘制棋盘
(8)判断输赢
…
面向过程的思想是注重做事的过程
面向对象编程
-
举例1:把大象放入冰箱
(1)冰箱:具有开门关门等行为
(2)大象:能够走路
面向对象关注的是:同一类事物具有的属性和行为,比如冰箱、大象是一类事物,他们都具有自己的属性和行为,强调的是具体的事物,而非过程
-
举例2:象棋游戏设计分析
(1)棋盘:是什么样的,有哪些特有行为,如绘制棋盘
(2)棋子:分红方和绿方,棋子的属性,和能够走动的行为
(3)规则系统:判定输赢
…
面向对象以功能划分,而非步骤
模拟世界万事万物来进行编程,面向对象可以理解为万物皆对象
类和对象关系
对象和类是分不开的,必须首先定义类才能有对象,每一个JAVA里面的class(类)都对应了我们现实生活中某一类事物的一个抽象
把某些具有相同的属性和行为的事物抽象成一类
-
狗
属性:颜色,眼睛,耳朵,体重
行为:叫,睡觉,摇尾巴
-
车:
属性:颜色,轮子,方向盘
行为:跑,刹车
- 类就是一个概念,如:狗
- 对象就是一个具体的实物,如:小灰灰,小白白
- 类可以看成一个模板,对象(实例)是根据这个模板所产生的样本
- 类是抽象的,对象(实例)是具体的
类的定义与使用
-
类的定义与使用
public class Car{ } public class Dog{ }
-
对象,对象的创建, java如何描述对象
-
匿名对象
栈中没有一个指向它的引用,所以是无意义的
对象练习
写一个描述老虎的类
- 具有的属性:颜色、身高、体重
- 具有的行为:吃东西、睡觉、跑
- 并根据该类产生2个实例对象
对象创建时的内存结构
-
堆空间
Java的堆是一个运行时数据区,存放用new产生的对象,堆会分配一定空间给新的对象
堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,
Java的垃圾收集器会自动收走这些不再使用的数据。
-
栈空间:
存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
优点:存取速度比堆要快,仅次于寄存器,栈数据可以共享。
缺点:存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
栈中主要存放一些基本类型的变量数据(int, short, long, byte, float, double, boolean, char)和对象句柄(引用)。
-
内存结构图
变量作用域
变量的作用域分为四个级别:类级、对象实例级、方法级、块级
-
类级别
类级变量又称全局级变量或静态变量,需要使用static关键字修饰。
类级变量在类定义后就已经存在,占用内存空间,可以通过类名来访问,不需要实例化
-
对象实例级别
对象实例级变量就是成员变量,在类中定义,可以不赋值,如果不赋值都会有默认,存储在堆空间中,实例化后才会分配内存空间,才能访问。
生命周期:随着对象的消失而消失
-
方法内部级别
方法级变量就是在方法内部定义的变量,就是局部变量,必须赋值才能使用,存储在栈中
生命周期:定义的时候产生,当前方法括号语句执行完成即消失
-
块级别
定义在语句块中,不常用
访问范围:
方法内部除了能访问方法级的变量,还可以访问类级和实例级的变量。
块内部能够访问类级、实例级变量,如果块被包含在方法内部,它还可以访问方法级的变量。
方法级和块级的变量必须被显示地初始化,否则不能访问。
本章课后作业
- 详细记住类与对象的关系,创建对象
- 掌握面向对象编程,能够随手使用类来描述万事万物
- 掌握对象创建时内存分配情况