一、对象本质
状态(State):通过成员变量(Field)描述
行为(Behavior):通过成员方法(Method)实现
java
class Person {
String name;
int age;
void eat() {
System.out.println(name + "正在吃饭");
}
}
对象的三大特性:
- 封装性:将数据和操作封装成独立单元
- 继承性:通过extends实现代码复用
- 多态性:父类引用指向子类对象的动态特性
二、对象生命周期
(一)对象创建的四个阶段
类加载检查:JVM 检查是否已加载该类的字节码
内存分配:在堆内存中划分存储区域(TLAB 优化机制)
初始化零值:基本类型赋默认值(int=0,boolean=false)
执行初始化:构造方法执行前的显式初始化
java
Person person = new Person();
(二)内存存储结构
|-----|------------|------------|
| 区域 | 存储内容 | 特点 |
| 栈内存 | 引用变量 | 线程私有,自动释放 |
| 堆内存 | 对象实例 | 线程共享,GC 管理 |
| 方法区 | 类信息 / 静态变量 | 共享,存储元数据 |
(三)对象销毁机制
引用计数法:循环引用问题无法解决
可达性分析:通过 GC Roots 标记可回收对象
finalize () 方法:对象销毁前的最后回调机会
三、核心应用
(一)构造方法的深度运用
java
class Student {
private String name;
private int age;
public Student() {}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student(String name) {
this(name, 18);
}
}
(二)对象比较的正确姿势
== 运算符:比较引用地址(基本类型比较值)
equals () 方法:建议重写实现内容比较
hashCode () 契约:重写 equals 必须重写 hashCode
java
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
(三)对象克隆的实现方式
浅克隆:实现 Cloneable 接口,重写 clone ()
深克隆:通过序列化 / 反序列化实现对象复制
java
class ShallowClone implements Cloneable {
int[] array = new int[5];
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
四、高级特性
(一)反射机制操作对象
java
Class<?> clazz = Class.forName("com.example.Person");
Person person = (Person) clazz.getDeclaredConstructor().newInstance();
Method method = clazz.getDeclaredMethod("privateMethod");
method.setAccessible(true);
method.invoke(person);
(二)代理模式增强对象
java
InvocationHandler handler = (proxy, method, args) -> {
System.out.println("前置处理");
Object result = method.invoke(target, args);
System.out.println("后置处理");
return result;
};
Service proxy = (Service) Proxy.newProxyInstance(
ClassLoader.getSystemClassLoader(),
new Class[]{Service.class},
handler
);
(三)对象序列化规范
java
class SerializableObject implements Serializable {
private static final long serialVersionUID = 1L;
transient String sensitiveInfo;
}