首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java API 核心:Object 類常用方法深度解析與最佳實踐

     編輯:Java 綜合教學

Object 類地位

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 同步塊中調用 生產者消費者、線程協作

equals/hashCode 重寫規範(以 IDE 生成標準為例)

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 + '}';
    }
}

最佳實踐清單

  1. 始終重寫 toString():包含業務關鍵字段,調試效率提升 80%
  2. 值類型必重寫 equals/hashCode:使用 Objects.equals、Objects.hash 防空指針
  3. 不要在 equals 中使用 instanceof:破壞對稱性(除非類 final),用 getClass() 比較
  4. 集合元素/Map 鍵:不可變對象、正確實現 equals/hashCode
  5. 克隆優先用拷貝構造器/工廠方法:new User(user) 或 User.of(user),避開 Cloneable 缺陷
  6. finalize 棄用:資源釋放用 try-with-resources 或 Cleaner (Java 9+)
  7. 同步協作:優先用 java.util.concurrent 高級組件,少用裸 wait/notify

getClass() 實戰示例

public 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 可自動生成標準實現,但理解其背後原理不可或缺。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved