Java中object類常用方法及應(yīng)用場景詳解
在Java中,Object 類是所有類的根父類,其提供的方法會被所有子類繼承。以下是Object類的常用方法及其典型應(yīng)用場景:
1. toString()
作用:返回對象的字符串表示(默認(rèn)格式:
類名@哈希碼)。重寫場景:
打印對象時需要可讀性更高的信息(如日志、調(diào)試)。
集合的
System.out.println()輸出依賴元素的toString()。
示例:
@Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; }
2. equals(Object obj)
作用:比較兩個對象是否“邏輯相等”(默認(rèn)比較內(nèi)存地址,即
==)。重寫場景:
需要根據(jù)對象內(nèi)容(而非地址)判斷相等性(如值對象、DTO)。
集合類(如
HashSet、ArrayList.contains())依賴此方法。
規(guī)則:
必須重寫
hashCode()以保證一致性(若equals返回true,hashCode必須相同)。滿足自反性、對稱性、傳遞性、一致性。
示例:
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; Person person = (Person) obj; return age == person.age && Objects.equals(name, person.name); }
3. hashCode()
作用:返回對象的哈希碼(默認(rèn)返回內(nèi)存地址的哈希值)。
重寫場景:
對象作為
HashMap的鍵或HashSet的元素時。必須與
equals()邏輯一致。
示例:
@Override public int hashCode() { return Objects.hash(name, age); // 使用工具類簡化計算 }
4. getClass()
作用:返回對象的運行時類(
Class對象)。應(yīng)用場景:
反射操作(如動態(tài)創(chuàng)建實例、調(diào)用方法)。
精確判斷對象類型(優(yōu)于
instanceof)。
示例:
Class<?> clazz = obj.getClass(); System.out.println(clazz.getName()); // 輸出類全限定名
5. clone()
作用:創(chuàng)建對象的淺拷貝副本。
應(yīng)用場景:
需要復(fù)制對象時(需實現(xiàn)
Cloneable標(biāo)記接口,否則拋CloneNotSupportedException)。深拷貝需手動重寫(遞歸復(fù)制引用類型字段)。
示例:
@Override protected Object clone() throws CloneNotSupportedException { return super.clone(); // 淺拷貝 }
6. finalize()(已廢棄)
作用:對象被垃圾回收前調(diào)用的清理方法(Java 9+標(biāo)記為廢棄)。
替代方案:使用
AutoCloseable(如try-with-resources)或顯式清理方法。
7. wait(), notify(), notifyAll()
作用:線程間通信的等待/通知機制(必須在
synchronized塊中使用)。應(yīng)用場景:
生產(chǎn)者-消費者模型。
多線程協(xié)作任務(wù)(如線程池任務(wù)調(diào)度)。
示例:
synchronized (lock) { while (conditionNotMet) { lock.wait(); // 釋放鎖并等待 } // 執(zhí)行操作 lock.notifyAll(); // 喚醒其他線程 }
核心方法總結(jié)
| 方法 | 典型應(yīng)用場景 | 注意事項 |
|---|---|---|
toString() | 日志輸出、調(diào)試 | 建議所有類重寫 |
equals()/hashCode() | 集合操作、對象比較 | 必須同時重寫,保持邏輯一致 |
getClass() | 反射、類型判斷 | 返回運行時類對象 |
clone() | 對象復(fù)制 | 深拷貝需手動實現(xiàn) |
wait()/notify() | 多線程同步 | 需搭配synchronized使用 |
為什么重要?
默認(rèn)行為:所有類繼承
Object,理解其方法避免踩坑(如集合比較錯誤)。框架依賴:如
HashMap依賴hashCode()和equals(),序列化依賴toString()。設(shè)計規(guī)范:正確重寫這些方法是面向?qū)ο笤O(shè)計的基本要求。
總結(jié)
到此這篇關(guān)于Java中object類常用方法及應(yīng)用場景的文章就介紹到這了,更多相關(guān)object類常用方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot整合Canal實現(xiàn)數(shù)據(jù)庫實時同步的完整指南
當(dāng)業(yè)務(wù)數(shù)據(jù)在MySQL中發(fā)生變化時,如何實時同步到其他服務(wù)或緩存中,阿里巴巴開源的Canal組件為我們提供了完美的解決方案,下面我們就來看看SpringBoot整合Canal的技術(shù)內(nèi)幕吧2026-02-02
springmvc中RequestMappingHandlerAdapter與HttpMessageConverter的
今天小編就為大家分享一篇關(guān)于springmvc中RequestMappingHandlerAdapter與HttpMessageConverter的裝配講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01
IDEA中如何查找jar包之間的依賴關(guān)系并忽略依賴的某個包
這篇文章主要介紹了IDEA中如何查找jar包之間的依賴關(guān)系并忽略依賴的某個包?本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
一文教你如何通過三級緩存解決Spring循環(huán)依賴
這篇文章主要介紹了如何通過三級緩存解決?Spring?循環(huán)依賴,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考價值,需要的朋友可以參考下2023-07-07
SpringBoot定制三種錯誤頁面及錯誤數(shù)據(jù)方法示例
Spring Boot提供的默認(rèn)異常處理機制通常并不一定適合我們實際的業(yè)務(wù)場景,因此,我們通常會根據(jù)自身的需要對Spring Boot全局異常進行統(tǒng)一定制,例如定制錯誤頁面,定制錯誤數(shù)據(jù)等。本文主要介紹了SpringBoot三種自定義錯誤頁面的實現(xiàn),快來學(xué)習(xí)吧2021-12-12

