龙空技术网

Java学习笔记(五):面向对象

和小C一起学Java 166

前言:

而今朋友们对“java面向对象答案”都比较关切,大家都想要学习一些“java面向对象答案”的相关内容。那么小编在网络上汇集了一些关于“java面向对象答案””的相关知识,希望兄弟们能喜欢,大家一起来学习一下吧!

面向对象

一、什么是面向对象?

学习面向对象,首先要了解什么是面向过程,C语言就是典型的面向过程语言,使用C语言进行编程,每一个功能都需要我们一行代码一行代码地去敲。例如洗衣服:放入衣服、加水、揉洗、冲刷、拧干,每一步都需要一点一点的其编写,而面向对象就是把这些步骤封装起来,当我们需要的时候直接去调用就可以了。

二、面向对象有哪些优点?

面向对象相较于面向过程多了一步将代码封装起来的操作,这样在计算机执行的时候依旧是面向过程的执行流程,甚至因为多了一步调用,在运行效率上还会有一点降低,但面向对象却极大提高了开发人员的开发效率,这是它最主要的优点。

三、类和对象

类,顾名思义就是对某一类事物的描述,包括事物的基本属性(大小、颜色、材质……)和行为动作(跑、飞、转动……);对象,就是创建一个类的实体,对类中定义的属性等赋予具体的值。例如:汽车类包括基本属性(品牌、颜色、价格)和行为动作(加速、减速、停止),创建一个汽车对象:基本属性(红旗、黑色、22万),行为动作(加速3s、减速2s、停止)。

四、对象的内存图及使用对象的执行流程

一个对象

第一步:将main方法从方法区调到栈中执行;

第二步:创建一个People类的对象p,并使用new在堆内存中申请一块空间;

第三步:打印p、p.name、p.age,输出的分别是对象在内存中的地址和两个变量的占位符;

第四步:修改变量并打印出来;

第五步:将eat方法从方法区调到栈中执行,执行结束后抛出;

第六步:main方法执行结束后也抛出栈,此时程序结束。

归纳:我们可以发现,对象的内存图和数组的内存图以及其执行流程极其相似,事实上,数组也是一个类,它是java类库中的,因此对于两个对象的内存图、两个变量指向同一个对象的内存图,我们可以对照两个数组的内存图、两个变量指向同一个数组的内存图来理解。

垃圾回收机制:看上面的内存图,当main方法抛出之后,堆内存中的对象怎么办,还能不能再用呢?答案是不能,因为随着main方法抛出,存储对象在内存中地址的变量p也消失了,这样,就没有任何办法能够再找到堆内存中的这个对象了,它也就成为了垃圾,唯一的命运就是等待着被垃圾回收机制回收处理。

五、成员变量和局部变量

在定义类时我们发现,属性变量是直接定义在类中的,而有些变量则是定义在方法中。我们把直接定义在类中的变量叫做成员变量,把定义在方法中的变量叫做局部变量,那二者有什么区别呢?

由概念可以知道,二者的定义位置是不同的,成员变量直接在类中定义,局部变量在方法内部定义。存储位置不同。类是通过在main方法中创建对象来使用的,这个对象存储在堆内存中,因此成员变量的存储位置也是在堆内存中;方法开始是存储在方法区中,当调用方法时,会在栈中执行,因此局部变量的存储位置是在栈中。生命周期不同。这个就很容易理解了,成员变量是跟着对象走的,所以它的生命周期和对象一样,对象何时被垃圾回收机制回收,它就何时消失;局部变量是跟着方法走的,所以当方法结束,从栈中抛出时,它就消失。成员变量有默认值,因为在堆中申请空间时需要有占位符,这个占位符就是成员变量的默认值,所以使用前不需要赋值;而局部变量使用前必须赋值,不使用可以不赋值。

六、private(提高代码安全性)

this(打破就近原则,代表当前对象)

构造方法(必须有,创建对象时调用,自己没有系统给无参的,自己有不给)

标签: #java面向对象答案