一、對象本質
狀態(State):通過成員變量(Field)描述
行為(Behavior):通過成員方法(Method)實現
class Person {String name;int age;void eat() {System.out.println(name + "正在吃飯");}
}
對象的三大特性:?
- 封裝性:將數據和操作封裝成獨立單元?
- 繼承性:通過extends實現代碼復用?
- 多態性:父類引用指向子類對象的動態特性
二、對象生命周期?
(一)對象創建的四個階段
????????類加載檢查:JVM 檢查是否已加載該類的字節碼?
????????內存分配:在堆內存中劃分存儲區域(TLAB 優化機制)?
????????初始化零值:基本類型賦默認值(int=0,boolean=false)?
????????執行初始化:構造方法執行前的顯式初始化
Person person = new Person();
(二)內存存儲結構
區域 | 存儲內容 | 特點 |
棧內存 | 引用變量 | 線程私有,自動釋放 |
堆內存 | 對象實例 | 線程共享,GC 管理 |
方法區 | 類信息 / 靜態變量 | 共享,存儲元數據 |
(三)對象銷毀機制?
????????引用計數法:循環引用問題無法解決?
????????可達性分析:通過 GC Roots 標記可回收對象?
????????finalize () 方法:對象銷毀前的最后回調機會
三、核心應用
(一)構造方法的深度運用
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
@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 ()?
????????深克隆:通過序列化 / 反序列化實現對象復制
class ShallowClone implements Cloneable {int[] array = new int[5];@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}
四、高級特性
(一)反射機制操作對象
Class<?> clazz = Class.forName("com.example.Person");
Person person = (Person) clazz.getDeclaredConstructor().newInstance();
Method method = clazz.getDeclaredMethod("privateMethod");
method.setAccessible(true);
method.invoke(person);
(二)代理模式增強對象
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
);
(三)對象序列化規范
class SerializableObject implements Serializable {private static final long serialVersionUID = 1L;transient String sensitiveInfo;
}