java 面向对象,java复制对象
一、什么是面向对象?
学习面向对象,首先要了解什么是面向过程,C语言就是典型的面向过程语言,使用C语言进行编程,每一个功能都需要我们一行代码一行代码地去敲。例如洗衣服:放入衣服、加水、揉洗、冲刷、拧干,每一步都需要一点一点的其编写,而面向对象就是把这些步骤封装起来,当我们需要的时候直接去调用就可以了。
二、面向对象有哪些优点?
面向对象相较于面向过程多了一步将代码封装起来的操作,这样在计算机执行的时候依旧是面向过程的执行流程,甚至因为多了一步调用,在运行效
面向对象
一、什么是面向对象?
学习面向对象,首先要了解什么是面向过程,C语言就是典型的面向过程语言,使用C语言进行编程,每一个功能都需要我们一行代码一行代码地去敲。例如洗衣服:放入衣服、加水、揉洗、冲刷、拧干,每一步都需要一点一点的其编写,而面向对象就是把这些步骤封装起来,当我们需要的时候直接去调用就可以了。
二、面向对象有哪些优点?
面向对象相较于面向过程多了一步将代码封装起来的操作,这样在计算机执行的时候依旧是面向过程的执行流程,甚至因为多了一步调用,在运行效率上还会有一点降低,但面向对象却极大提高了开发人员的开发效率,这是它最主要的优点。
三、类和对象
类,顾名思义就是对某一类事物的描述,包括事物的基本属性(大小、颜色、材质……)和行为动作(跑、飞、转动……);对象,就是创建一个类的实体,对类中定义的属性等赋予具体的值。例如:汽车类包括基本属性(品牌、颜色、价格)和行为动作(加速、减速、停止),创建一个汽车对象:基本属性(红旗、黑色、22万),行为动作(加速3s、减速2s、停止)。
四、对象的内存图及使用对象的执行流程
一个对象第一步:将main方法从方法区调到栈中执行;
第二步:创建一个People类的对象p,并使用new在堆内存中申请一块空间;
第三步:打印p、p.name、p.age,输出的分别是对象在内存中的地址和两个变量的占位符;
第四步:修改变量并打印出来;
第五步:将eat方法从方法区调到栈中执行,执行结束后抛出;
第六步:main方法执行结束后也抛出栈,此时程序结束。
归纳:我们可以发现,对象的内存图和数组的内存图以及其执行流程极其相似,事实上,数组也是一个类,它是java类库中的,因此对于两个对象的内存图、两个变量指向同一个对象的内存图,我们可以对照两个数组的内存图、两个变量指向同一个数组的内存图来理解。
垃圾回收机制:看上面的内存图,当main方法抛出之后,堆内存中的对象怎么办,还能不能再用呢?答案是不能,因为随着main方法抛出,存储对象在内存中地址的变量p也消失了,这样,就没有任何办法能够再找到堆内存中的这个对象了,它也就成为了垃圾,唯一的命运就是等待着被垃圾回收机制回收处理。
五、成员变量和局部变量
在定义类时我们发现,属性变量是直接定义在类中的,而有些变量则是定义在方法中。我们把直接定义在类中的变量叫做成员变量,把定义在方法中的变量叫做局部变量,那二者有什么区别呢?
由概念可以知道,二者的定义位置是不同的,成员变量直接在类中定义,局部变量在方法内部定义。存储位置不同。类是通过在main方法中创建对象来使用的,这个对象存储在堆内存中,因此成员变量的存储位置也是在堆内存中;方法开始是存储在方法区中,当调用方法时,会在栈中执行,因此局部变量的存储位置是在栈中。生命周期不同。这个就很容易理解了,成员变量是跟着对象走的,所以它的生命周期和对象一样,对象何时被垃圾回收机制回收,它就何时消失;局部变量是跟着方法走的,所以当方法结束,从栈中抛出时,它就消失。成员变量有默认值,因为在堆中申请空间时需要有占位符,这个占位符就是成员变量的默认值,所以使用前不需要赋值;而局部变量使用前必须赋值,不使用可以不赋值。六、private(提高代码安全性)
this(打破就近原则,代表当前对象)
构造方法(必须有,创建对象时调用,自己没有系统给无参的,自己有不给)
文章评论