java基础-9.1 面向对象(类)

目录

1.面向对象

1.1 什么是面向过程、面向对象

1.2 面向对象举例

2.类与对象

2.1 对象在需求中的使用

2.2 对象在代码中的体现

2.3 类和对象的区别

2.4 基本类型和引用类型作为参数传递


 

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),即建文件夹

java基础-9.1 面向对象(类)

 

2.3 类和对象的区别

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

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

 

类:定义属性和行为

对象:调用具体的属性和功能

* 成员变量和局部变量的区别

*

* 1.定义位置的区别

* 成员变量,定义在类中,方法外

* 局部变量,定义在方法内,语句内

*

* 2.作用域不同

* 成员变量,作用范围是整个类

* 局部变量,作用范围是方法内,语句内

*

* 3.默认值的不同

* 成员变量,有自己的默认值

* 局部变量,没有默认值,不赋值不能使用

*

* 4.内存位置不同

* 成员变量,跟随对象进入堆内存存储

* 局部变量,跟随自己的方法,进入栈内存

*

* 5.生命周期不同

* 成员变量,跟随对象,在堆中存储,随着对象的消失而从堆中消失

* 局部变量,跟随方法,在栈中存储,随着方法的弹栈而消失

 

2.4 基本类型和引用类型作为参数传递

基本数据类型图示:

java基础-9.1 面向对象(类)

基本类型作为参数传递时,其实就是将基本类型变量x空间中的值复制了一份传递给调用的方法show(),当在show()方法中x接受到了复制的值,再在show()方法中对x变量进行操作,这时只会影响到show中的x。当show方法执行完成,弹栈后,程序又回到main方法执行,main方法中的x值还是原来的值。

 

引用数据类型图示:

java基础-9.1 面向对象(类)

当引用变量作为参数传递时,这时其实是将引用变量空间中的内存地址(引用)复制了一份传递给了function方法的p引用变量。这时会有两个引用同时指向堆中的同一个对象。当执行function方法中的p.name=“李四”时,会根据name所持有的引用找到堆中的对象,并将其name属性的值改为“李四”,function方法弹栈。

由于是两个引用指向同一个对象,不管是哪一个引用改变了引用的所指向的对象的中的值,其他引用再次使用都是改变后的值。