java.lang.Object 是所有 Java 類的根父類。類聲明時無 extends 則隱式繼承 Object。它定義了所有對象共享的基礎協議:相等性判斷、哈希碼、字符串表示、克隆、同步、終結等。
| 方法 | 簽名 | 契約/規約 | 常見重寫場景 |
|---|---|---|---|
| equals | public boolean equals(Object obj) |
自反性、對稱性、傳遞性、一致性、非空性。重寫 equals 必須重寫 hashCode | 值對象、實體類、DTO、集合元素 |
| hashCode | public int hashCode() |
同一對象多次調用返回一致;equals 相等則 hashCode 必相等 | 配合 equals,用於 HashMap/HashSet 鍵 |
| toString | public String toString() |
返回對象簡潔、可讀的字符串表示,建議包含關鍵屬性 | 所有業務類,調試日誌必備 |
| clone | protected Object clone() throws CloneNotSupportedException |
實現 Cloneable 標記接口,淺拷貝;深拷貝需手動遞歸 |
原型模式、防禦性拷貝 |
| getClass | public final Class<?> getClass() |
返回運行時類對象,支持反射、RTTI | 框架開發、序列化、類型判斷 |
| finalize | protected void finalize() throws Throwable |
已棄用 (Java 9),GC 前調用,不可靠,替代方案:try-with-resources / Cleaner | 不再推薦使用 |
| wait/notify/notifyAll | final void wait() 等 |
基於監視器鎖的線程協作,必須在 synchronized 同步塊中調用 | 生產者消費者、線程協作 |
public class User {
private Long id;
private String name;
private int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return age == user.age &&
Objects.equals(id, user.id) &&
Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name, age);
}
@Override
public String toString() {
return "User{id=" + id + ", name='" + name + "', age=" + age + '}';
}
}
Objects.equals、Objects.hash 防空指針getClass() 比較new User(user) 或 User.of(user),避開 Cloneable 缺陷try-with-resources 或 Cleaner (Java 9+)java.util.concurrent 高級組件,少用裸 wait/notifypublic class GetClassDemo {
public static void main(String[] args) {
String s = "Hello";
System.out.println(s.getClass()); // class java.lang.String
System.out.println(s.getClass().getName()); // java.lang.String
System.out.println(s.getClass().getSimpleName()); // String
// 反射應用
Class<?> clazz = s.getClass();
System.out.println("Methods: " + Arrays.toString(clazz.getDeclaredMethods()));
}
}
掌握 Object 類契約,是編寫健壯、可維護 Java 代碼的基石。現代開發中,Lombok @Data / @EqualsAndHashCode / @ToString 可自動生成標準實現,但理解其背後原理不可或缺。