面向对象基础
# 面向对象基础
# 1. 类和对象
# 1.1 类和对象的理解
客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。
- 类
- 类的理解
- 类是对现实生活中一类具有共同属性和行为的事物的抽象
- 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合
- 简单理解:类就是对现实事物的一种描述
- 类的组成
- 属性:指事物的特征,例如:手机事物(品牌,价格,尺寸)
- 行为:指事物能执行的操作,例如:手机事物(打电话,发短信)
- 类的理解
- 类和对象的关系
- 类:类是对现实生活中一类具有共同属性和行为的事物的抽象,是对象共同特征的描述
- 对象:是能够看得到摸的着的真实存在的实体,是真实存在的具体实例
- 简单理解:类是对事物的一种描述,对象则为具体存在的事物
# 1.2 类的定义
类的组成是由属性和行为两部分组成
- 属性:在类中通过成员变量来体现(类中方法外的变量)
- 行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)
⚠️ 补充注意事项:
类名首字母建议大写,且有意义,满足“驼峰模式”。
一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。 实际开发中建议还是一个文件定义一个class类。
成员变量的完整定义格式是:
修饰符 数据类型 变量名称 = 初始化值
; 一般无需指定初始化值,存在默认值。对象的成员变量的默认值规则:
数据类型 明细 默认值 基本类型 byte、short、char、int、long 0 基本类型 float、double 0.0 基本类型 boolean false 引用类型 类、接口、数组、String null
# 2. 对象内存图
# 2.1 多个对象内存图
- 对象的成员方法不直接加载到堆内存中,而是在堆内存中引用方法区中的内容。
- 对象的成员变量存储值在堆内存中修改。
- 执行到第二个对象创建时,在堆内存中再开辟一个新的空间存此新对象。
总结:
- 对象放在堆内存中。
Car c = new Car();
语句中,c 变量名中存储的是对象在堆内存中的地址。- 成员变量(name、price)的数据放在对象中,存在堆内存中。
# 2.2 多个对象指向相同内存图
总结:
当多个对象的引用指向同一个内存空间(变量所记录的地址值是一样的)
只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据。
# 2.3 垃圾回收
当堆内存中的类对象或数组对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”。
- 如上图中若代码中后续还有
s1=null; s2=null;
,会导致左侧两条指向堆内存中对象存储区域的红线不存在,此时堆内存的白色区域变成了内存垃圾。
- 如上图中若代码中后续还有
Java 存在自动垃圾回收器,会定期进行清理。
# 3. 构造器
# 3.1 构造器的作用
初始化类的对象,并返回对象的地址。
# 3.2 构造器的分类
无参数构造器
- (默认存在的):初始化对象时,成员变量的数据均采用默认值。
有参数构造器
- 在初始化对象的时候,同时可以为对象进行赋值。
⚠️ 注意事项:
任何类定义出来,默认就自带了无参数构造器,写不写都有。
一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写一个无参数构造器了。
public class Car {
...
// 无参数构造器(此时需要明确写出来)
public Car(){
}
// 有参数构造器
public Car(String n, String b){
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 4. this 关键字
- 作用
- 代表当前对象的地址
- this关键字在构造器中、成员方法中可以做什么
- 可以用于访问当前对象的成员变量
# 5. 封装
# 5.1 什么是封装
面向对象的三大特征:封装,继承,多态
隐藏实现细节,暴露出合适的访问方式。(合理隐藏、合理暴露)
# 5.2 封装的实现步骤
一般对成员变量使用 private (私有)关键字修饰进行隐藏,private 修饰后该成员变量就只能在当前类中访问。
提供 public 修饰的公开的 getter、setter 方法暴露其取值和赋值。
- IDEA 中可以自动生成 getter、setter 方法
方法和哪个对象封装在一起怎么确定 ?
方法导致谁的属性变化,该方法就属于哪个对象
# 5.3 封装的好处
- 加强了程序代码的安全性。
- 适当的封装可以提升开发效率,同时可以让程序更容易理解与维护。
# 6. 标准 JavaBean
JavaBean: 也可以理解成实体类,其对象可以用于在程序中封装数据。
标准JavaBean须满足如下要求:
- 成员变量使用 private 修饰。
- 提供每一个成员变量对应的 setXxx() / getXxx()。
- 必须提供一个无参构造器。
# 7. 成员变量和局部变量
# 7.1 成员变量和局部变量的区别
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 类中,方法外 | 常见于方法中 |
初始化值不同 | 有默认初始化值 | 没有,使用之前需要完成赋值 |
内存中位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随着对象的创建而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的运行结束而消失 |
作用域 | (不一定) | 在所归属的大括号中 |
编辑 (opens new window)
上次更新: 2023/01/29, 08:40:33