目录
类和对象
面向过程和面向对象思想的对比
面向过程(c语言):关注点在过程,需要我们一步一步的实现功能
面向对象(java):关注点在对象,我们只需要指挥对象(通过类创建)完成一些功能
面向对象是基于面向过程的,我们是站在巨人的肩膀上编程的
1.1 类和对象的关系
类:一类具有相同属性和行为的事物的描述 -> 理解为设计图
对象:客观存在的事物 -> 根据设计图可以创建多个对象
1.2 标准类的定义
1.成员变量: 必须使用private关键字私有
2.构造方法: 提供空参和带参,用户选择哪一种都行 -> 快捷键生成
3.成员方法: 必须提供成员变量对应的getXxx和setXxx方法 -> 快捷键生成
1.3 对象的创建和使用
数据类型 对象名 = new 数据类型(); //空参构造
数据类型 对象名 = new 数据类型(属性1,属性2...); //带参构造
使用对象,其实就是使用对象名(调用它的方法)
1.4 对象内存图
1.4.1 单个对象内存图
1.栈内存 -> 方法进栈
2.堆内存 -> new出来的东西进堆
3.方法区 -> 字节码文件
1.4.2 两个对象内存图
总结:
多个对象在堆内存中,都有不同的内存划分,成员变量存储在各自的内存区域中,成员方法多个对象共用的一份
1.4.3 两个对象指向相同内存图
成员变量
总结 :
当多个对象的引用指向同一个内存空间(变量所记录的地址值是一样的)
只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据。
1.5 成员变量和局部变量的区别
1.类中位置:成员变量在类中方法外;局部变量在方法上
2.内存中位置:成员变量在堆内存(跟着对象走);局部变量在栈内存(跟着方法走)
3.生命周期:成员变量就是对象的生命周期;局部变量就是方法的生命周期
4.初始化值:成员变量进堆,所以有默认的初始化值;局部变量没有,需要先定义赋值,才能使用
1.6 private关键字的使用
private关键字是权限修饰符(java中有四种权限)
private关键字可以修饰成员(成员变量和成员方法)
被private修饰的成员,只能在本类中访问(出了本类就访问不到了! -> 有问题! -> 提供对应公共的访问方式)
1.7 this关键字的内存原理
this关键字代表当前类,对象的引用(地址)
this可以调用本类的成员
我们使用this区分局部变量和成员变量重名问题
1.8 封装概述
java中面向对象的三大特征:封装,继承,多态
封装:隐藏实现细节,对外提供对应公共的访问方式
体现1:私有成员,提供对应的get和set方法(安全性)
体现2:方法的定义,将代码封装在方法中(复用性)
体现3:将数据封装在类中
1.9 构造方法的格式和执行时机
空参:public/private 类名和方法名一致(){}
带参:public/private 类名和方法名一致(属性1,属性2..){
this.属性1 = 属性1;
this.属性2 = 属性2;
...
}
1.9.1 构造方法的作用
本质的作用是创建对象
其他作用,借助了构造方法加载的时机,完成对象的赋值(带参构造)
1.9.2 构造方法的注意事项
1.如果我们不提供构造,系统会提供一个默认的空参
2.如果我们提供了带参,系统就不会给我们空参了
3.总结:两种都提供
public class User {
// 成员变量
private String name;
private int age;
// 构造方法
public User() {
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
// 成员方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}