七、面向对象
7.1 类和对象
类是对象共同特征的描述。
对象是真实存在的具体东西。
在java中,必须先设计类,才能获得对象。
public class 类名{
1.成员变量;
2.成员方法;
3.构造器;
4.代码块;
5,内部类;
}
如何得到类的对象
类名 对象名 = new 类名();
Phone p = new Phone();
如何使用对象
- 访问属性:对象.成员变量
- 访问行为:对象名.方法名(…)
补充事项
- 用来描述一类事物的类,专业叫做:javabean类。在javabean类中,是不写main方法的。
- 编写main方法的类,叫做测试类。我们可以在测试类中创建javabean类的对象并进行赋值调用。
7.2 封装
封装告诉我们如何正确设计对象的属性和方法。
封装重要原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为。
private关键字
- 是一个权限修饰符
- 可以修饰成员(成员变量和成员方法)
- 被private修饰的成员只能在本类中才能访问
7.3 就近原则和this关键字
成员变量和局部变量
变量定义在方法里面则是局部变量,变量定义再方法外面、类的里面成为成员变量。
当成员变量与局部变量重名时,采用就近原则。
若想使用成员变量的同名关键字变量,则需要使用this关键字。
7.4 构造方法
构造方法也叫构造器、构造函数。
作用:再创建对象的时候给成员变量进行初始化。
构造方法的格式
public class Student() {
修饰符 类名(参数) {
方法体;
}
}
构造方法的特点
- 方法名与类名相同,大小写也要一致
- 没有返回值类型,连void也没有
- 没有具体的返回值(不能由return带回结果数据)
注意事项
构造方法的定义
- 创建对象的时候由虚拟机调用,不能手动调用构造方法
- 每创建一次对象,就会调用一次构造方法
- 如果没有写任何构造方法,那么虚拟机会给我们加一个空参构造方法
构造方法的重载
- 带参构造方法和无参数构造方法,两种方法名相同但参数不同,这叫构造方法的重载。
推荐使用方式
- 无论是否使用,都手动书写无参数构造方法,和带全部参数的构造方法
注意点
- 创造对象的时候,虚拟机会自动调用构造方法,作用是给成员变量进行初始化
7.5 标准javabean类
标准的javabean符合以下标准
- 类名需要见名知意
- 成员变量使用private修饰
- 至少提供两个构造方法
- 无参构造方法
- 带全部参数的构造方法
- 成员方法
- 提供每一个成员变量对应是setXxx()/getXxx()
- 如果还有其他行为,也需要写上
IDEA生成javabean快捷键:alt + insert
7.6 对象内存图
java内存图
一个对象的内存图
当执行student s = new Student(),内存里会执行以下几件事务。
- 加载class文件,将student类的字节码文件加载到内存
- 申明局部变量,对s进行申明
- 在堆内存中开辟一个空间,new关键字开辟空间
- 默认初始化
- 显示初始化
- 构造方法初始化
- 将堆内存中的地址赋值给左边的局部变量
两个对象的内存图
两个引用指向同一个对象
7.7 this的内存原理
this的作用:区分局部变量和成员变量。
this的本质:所在方法调用者的地址值。
7.8 成员变量和局部变量的区别
成员变量:类中方法外的变量
局部变量:方法中的变量