1、面向对象和面向过程的思想对比
- 面向过程编程(POP)
是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的。 - 面向对象编程(OOP)
是一种以对象为中心的编程思想,通过指挥对象实现具体的功能。
对象:指客观存在的事物
小结:
- 客观存在的任何一种事物,都可以看做为程序中的对象
- 使用面向对象思想可以将复杂的问题简单化
- 将我们从执行者的位置,变成了指挥者
2、类和对象
类是对现实生活中一类具有共同属性和行为的事物的抽象。
【类】是对事物,也就是对象的一种描述,可以将类理解为一张设计图,根据设计图,可以创建出具体存在的事物。
根据类去创建对象类的组成:
- 属性
该事物的各种特征 -
类和对象的关系
类:类是对现实生活中一具有共同属性和行为的事物的抽象
对象:是能够看得到摸得着的真实存在的实体
类是对象的描述
对象是类的实体3、类的定义
类的组成:属性和行为
属性:在代码中通过成员变量来体现(类中方法外的变量)
- 行为:在代码中通过成员方法来实现(和前面的方法相比去掉static关键字即可)
类的定义步骤:
- 定义类
- 编写类的成员变量
编写类的成员方法 ```java public class Student { //成员变量 String name; int age;
//成员方法 public void study(){
System.out.println("学习");
} }
4、对象的创建和使用
创建对象格式:类名 对象名 = new 类名();
对象的调用格式:
调用成员变量:对象名.变量名
调用成员方法:对象名.方法名();
全类名(包名 + 类名)
打System.out.println(stu);
�得到:com.itheima.object1.Student@2f92e0f4
@ :分隔符
com.itheima.object1.Student : 全类名(包名 + 类名)2f92e0f4
:十六位内存地址
5、单对象内存图
创建同一个类的多个对象时,不用重新加载类到方法区。
多个对象成员方法使用的是同一个类里的方法。
多个对象成员变量都是单独的。
多个对象内存图
多个引用指向同一对象时,两个引用变量指向同一块堆内存,任何一个引用,对成员变量进行更改,都会导致另一个也发生变化。
6、垃圾回收
注意:当堆内存中,对象或者数组产生的地址,通过任何方式都不能被找到之后,就会被判定为内存中的“垃圾”
垃圾会被java垃圾回收器,空闲的时候自动进行清理。
7、成员变量和局部变量
成员变量:类中方法外的变量
局部变量:方法中的变量
区别:
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 类中方法外 | 方法内或者方法声明上(形参) |
内存中位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随着对象的存在而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的调用完毕而消失 |
初始化值不同 | 有默认的初始化值 | 没有默认的初始化值,必须先定义,赋值,才能使用 |
8、封装
外部无法直接访问类内部的成员变量,需要使用get和set方法来访问
private关键词
- 是一个权限修饰符
- 可以修饰成员(成员变量和成员方法)
- 被private修饰的成员只能在本类中才能访问
针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作
- 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰
this关键字
当局部变量和成员变量发生重名的时候,会采用就近原则。
可以使用this关键字标识为成员变量。
作用:this关键字可以调用本类的成员(成员变量,成员方法)
解决局部变量和成员变量的重名问题。
this:代表所在类的对象引用
方法被哪个对象调用,this就代表哪个对象this内存原理
封装的思想
面向对象三大特征之一(封装,继承,多态)
- 隐藏实现细节,仅对外暴露公共的访问方式
- 私有是封装的一种体现
- 封装的常见的体现:
1. 私有成员变量,提供setXxx和getXxx方法 1. 将代码抽取到方法中,这是对代码的一种封装 1. 将属性抽取到类中,这是对数据的一种封装
- 封装的好处:
1. 提高了代码的安全性 1. 提高了代码的复用性
构造方法
创建、创造对象的时候所调用的方法。
格式:
- 方法名与类名相同,大小写也要一致
- 没有返回值类型,连void都没有
- 没有具体的返回值(不能由return带回结果数据)
执行时机:
- 创建对象的时候调用,每创建一次对象,就会执行一次构造方法
- 不能手动调用构造方法
构造方法的作用:用于给对象的数据(属性)进行初始化。
注意事项:
1.构造方法的创建
- 如果没有定义构造方法,系统将给出一个默认的无参构造方法
- 如果定义了构造方法,系统将不再提供默认的构造方法
2.构造方法的重载
- 如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法
3.推荐的使用方式
- 无论是否使用,都手动书写无参数构造方法,和带参数构造方法