目录
1.面向对象
1.1 什么是面向过程、面向对象
面向过程与面向对象都是我们编程中,编写程序的一种思维方式。
- 面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程。
例如:公司打扫卫生(擦玻璃、扫地、拖地、倒垃圾等),按照面向过程的程序设计方式会思考“打扫卫生我该怎么做,然后一件件的完成”,最后把公司卫生打扫干净了。
- 面向对象的程序设计方式,是遇到一件事时,思考“我该让谁来做”,然后那个“谁”就是对象,他要怎么做这件事是他自己的事,反正最后一群对象合力能把事就好就行了。
例如,公司打扫卫生(擦玻璃、扫地、拖地、倒垃圾等),按照面向对象的程序设计方式会思考“我该让谁来做,如小明擦玻璃、让小丽扫地、让小郭拖地、让小强倒垃圾等”,这里的“小明、小丽、小郭、小强”就是对象。
1.2 面向对象举例
1)买电脑(组装机)
先使用面向过程说明买电脑这件事:假如我们需要买组装电脑
分析上述整个过程大体分一下几步:上网查询参数和报价、电脑城询价、现场安装和监督、抱电脑回家。在整个过程中我们参与了每一个细节,并且会感觉相当累。
使用面向对象说明买电脑这件事:假如我们需要买组装机,这时应该找一个懂电脑硬件的人,让他帮我们查看参数和报价,并进行询价和杀价,以及现场组装监督。而我们自己并不需要亲历亲为具体怎么做,只要告诉这个人我们想要的具体需求即可。
分析上述整个过程,发现瞬间变的十分轻松,只要找到懂电脑硬件的这个人,我们的问题都可以解决。并且在这个过程中我们不用那么辛苦。
2.类与对象
2.1 对象在需求中的使用
例如:把大象装冰箱
需求:把大象装冰箱里
对象:大象、冰箱
分三步:
1、打开冰箱门
2、将大象装进去
3、关闭冰箱门
分析发现打开、装、关闭都是冰箱的功能。即冰箱对象具备如下功能:
冰箱打开
冰箱存储
冰箱关闭
用伪代码描述,上述需求中有两个具体的事物 大象 和 冰箱
描述大象: class 大象 { }
描述冰箱: class冰箱 { void 打开(){} void 存储(大象){} void 关闭(){} } | 描述清楚具体的事物后,使用具体的事物, Java使用具体的事物,需要通过new关键字来创建这个事物的具体实例。 使用对象: 1、创建冰箱的对象 冰箱 bx = new 冰箱(); 2、调用冰箱的功能 对象.功能(); bx.打开(); bx.存储(new 大象()); bx.关闭(); |
总结:
1、先按照名词提炼问题领域中的对象
2、对对象进行描述,其实就是在明确对象中应该具备的属性和功能
3、通过new的方式就可以创建该事物的具体对象
4、通过该对象调用它以后的功能。
2.2 对象在代码中的体现
建包(package),即建文件夹
2.3 类和对象的区别
类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。
类用于描述多个对象的共同特征,它是对象的模板。对象用于描述现实中的个体,它是类的实例。
类:定义属性和行为
对象:调用具体的属性和功能
* 成员变量和局部变量的区别 * * 1.定义位置的区别 * 成员变量,定义在类中,方法外 * 局部变量,定义在方法内,语句内 * * 2.作用域不同 * 成员变量,作用范围是整个类 * 局部变量,作用范围是方法内,语句内 * * 3.默认值的不同 * 成员变量,有自己的默认值 * 局部变量,没有默认值,不赋值不能使用 * * 4.内存位置不同 * 成员变量,跟随对象进入堆内存存储 * 局部变量,跟随自己的方法,进入栈内存 * * 5.生命周期不同 * 成员变量,跟随对象,在堆中存储,随着对象的消失而从堆中消失 * 局部变量,跟随方法,在栈中存储,随着方法的弹栈而消失 |
2.4 基本类型和引用类型作为参数传递
基本数据类型图示:
基本类型作为参数传递时,其实就是将基本类型变量x空间中的值复制了一份传递给调用的方法show(),当在show()方法中x接受到了复制的值,再在show()方法中对x变量进行操作,这时只会影响到show中的x。当show方法执行完成,弹栈后,程序又回到main方法执行,main方法中的x值还是原来的值。
引用数据类型图示:
当引用变量作为参数传递时,这时其实是将引用变量空间中的内存地址(引用)复制了一份传递给了function方法的p引用变量。这时会有两个引用同时指向堆中的同一个对象。当执行function方法中的p.name=“李四”时,会根据name所持有的引用找到堆中的对象,并将其name属性的值改为“李四”,function方法弹栈。
由于是两个引用指向同一个对象,不管是哪一个引用改变了引用的所指向的对象的中的值,其他引用再次使用都是改变后的值。