文章目录
一、面向对象和面向过程的思想对比
- 面向过程编程(Procedure Oriented Programming)是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的。
- 面向对象编程(Object Oriented Programming)是一种以对象为中心的编程思想,通过指挥对象实现具体的功能。
二、类和对象
对象:指客观存在的事物,如上图中的洗衣机就是对象。
类是一组具有共同属性和行为的事物的抽象,简单理解,类就是对事物的一种描述。
描述事物,则需要属性和行为。
属性:事物具备的各个特征,例如 -> 手机这个事物的特征(品牌,价格…)
行为:事物能执行的操作,例如 -> (打电话,发短信)
1.类和对象的关系
类是对象的抽象(描述),对象是类的实体
在程序中需要先有类,才能创建出对象!
2.类的定义
类的定义步骤:
- 定义类
- 编写类的成员变量
- 编写类的成员方法
public class 类名 {
// 成员变量
变量1的数据类型 变量1;
变量2的数据类型 变量2;
…
// 成员方法
方法1;
方法2;
…
}
3.对象的使用
创建对象
- 格式:类名 对象名 = new 类名();
- 范例:Phone P = new Phone();
使用对象
- 使用成员变量
格式:对象名.变量名
范例:p.brand - 使用成员方法
格式:对象名.方法名()
范例:p.call()
4.对象调用内存图
①首先将测试类TestStudent加载进方法区
②测试类中的main()方法进入栈内存,执行代码
③调用Student类,将其成员变量和成员方法加载进方法区
④在堆内存中开辟空间、产生地址,根据Student类中的成员变量创建,且有默认值 成员方法并不会进入堆内存,但会有一个空间用来存放成员方法的地址,可通过这个地址找到字节码文件中的成员方法。上述全部完成后,将地址赋给s。
⑤继续执行,控制台输出:001
⑥继续执行,控制台输出:null…0
⑦将“阿强”赋给name、23赋给age,控制台输出:阿强…23
⑧通过s的地址找到堆内存,然后通过堆内存中的成员方法的地址找到字节码文件中的成员方法study(),将其加载至栈内存中运行,然后执行其中的代码,控制台输出:好好学习
⑨study()执行完成后,从栈内存中弹栈消失,然后main方法弹栈消失
5.垃圾回收
-
栈内存:方法被调用就会在栈内存存在, 方法执行结束之后,从栈内存中消失了,包括里面的变量以及基本类型的数据值都消失了。
-
堆内存:当指向这个堆内存中的对象的所有的变量都消失了的时候。这时候这个对象就会变成内存垃圾,但是并不会立刻消失。而是 java底层有一个垃圾回收机制 定时轮训 每隔一段时间就去检测垃圾,并且回收垃圾。
-
方法区:方法区中的内容,只要jvm不关闭,任何时候都不消失。
三、成员变量和局部变量
- 成员变量:类中方法外的变量
- 局部变量:方法中的变量
1.成员变量和局部变量的区别
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 类中方法外 | 方法内或者方法声明上 |
内存中位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随着对象的存在而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的调用完毕而消失 |
初始化值不同 | 有默认的初始值 | 没有默认的初始化值,必须先定义、赋值,才能使用 |
四、封装
1.封装概述
封装是面向对象三大特征之一(封装、继承、多态)
是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的
2.封装原则
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
成员变量private,提供对应的getXxx()/setXxx()方法
3.封装好处
通过方法来控制成员变量的操作,提高了代码的安全性
把代码进行封装,提高了代码的复用性