Java中object類常用方法及應(yīng)用場(chǎng)景詳解
在Java中,Object
類是所有類的根父類,其提供的方法會(huì)被所有子類繼承。以下是Object
類的常用方法及其典型應(yīng)用場(chǎng)景:
1. toString()
作用:返回對(duì)象的字符串表示(默認(rèn)格式:
類名@哈希碼
)。重寫場(chǎng)景:
打印對(duì)象時(shí)需要可讀性更高的信息(如日志、調(diào)試)。
集合的
System.out.println()
輸出依賴元素的toString()
。
示例:
@Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; }
2. equals(Object obj)
作用:比較兩個(gè)對(duì)象是否“邏輯相等”(默認(rèn)比較內(nèi)存地址,即
==
)。重寫場(chǎng)景:
需要根據(jù)對(duì)象內(nèi)容(而非地址)判斷相等性(如值對(duì)象、DTO)。
集合類(如
HashSet
、ArrayList.contains()
)依賴此方法。
規(guī)則:
必須重寫
hashCode()
以保證一致性(若equals
返回true
,hashCode
必須相同)。滿足自反性、對(duì)稱性、傳遞性、一致性。
示例:
@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()
作用:返回對(duì)象的哈希碼(默認(rèn)返回內(nèi)存地址的哈希值)。
重寫場(chǎng)景:
對(duì)象作為
HashMap
的鍵或HashSet
的元素時(shí)。必須與
equals()
邏輯一致。
示例:
@Override public int hashCode() { return Objects.hash(name, age); // 使用工具類簡(jiǎn)化計(jì)算 }
4. getClass()
作用:返回對(duì)象的運(yùn)行時(shí)類(
Class
對(duì)象)。應(yīng)用場(chǎng)景:
反射操作(如動(dòng)態(tài)創(chuàng)建實(shí)例、調(diào)用方法)。
精確判斷對(duì)象類型(優(yōu)于
instanceof
)。
示例:
Class<?> clazz = obj.getClass(); System.out.println(clazz.getName()); // 輸出類全限定名
5. clone()
作用:創(chuàng)建對(duì)象的淺拷貝副本。
應(yīng)用場(chǎng)景:
需要復(fù)制對(duì)象時(shí)(需實(shí)現(xiàn)
Cloneable
標(biāo)記接口,否則拋CloneNotSupportedException
)。深拷貝需手動(dòng)重寫(遞歸復(fù)制引用類型字段)。
示例:
@Override protected Object clone() throws CloneNotSupportedException { return super.clone(); // 淺拷貝 }
6. finalize()(已廢棄)
作用:對(duì)象被垃圾回收前調(diào)用的清理方法(Java 9+標(biāo)記為廢棄)。
替代方案:使用
AutoCloseable
(如try-with-resources
)或顯式清理方法。
7. wait(), notify(), notifyAll()
作用:線程間通信的等待/通知機(jī)制(必須在
synchronized
塊中使用)。應(yīng)用場(chǎng)景:
生產(chǎn)者-消費(fèi)者模型。
多線程協(xié)作任務(wù)(如線程池任務(wù)調(diào)度)。
示例:
synchronized (lock) { while (conditionNotMet) { lock.wait(); // 釋放鎖并等待 } // 執(zhí)行操作 lock.notifyAll(); // 喚醒其他線程 }
核心方法總結(jié)
方法 | 典型應(yīng)用場(chǎng)景 | 注意事項(xiàng) |
---|---|---|
toString() | 日志輸出、調(diào)試 | 建議所有類重寫 |
equals() /hashCode() | 集合操作、對(duì)象比較 | 必須同時(shí)重寫,保持邏輯一致 |
getClass() | 反射、類型判斷 | 返回運(yùn)行時(shí)類對(duì)象 |
clone() | 對(duì)象復(fù)制 | 深拷貝需手動(dòng)實(shí)現(xiàn) |
wait() /notify() | 多線程同步 | 需搭配synchronized 使用 |
為什么重要?
默認(rèn)行為:所有類繼承
Object
,理解其方法避免踩坑(如集合比較錯(cuò)誤)。框架依賴:如
HashMap
依賴hashCode()
和equals()
,序列化依賴toString()
。設(shè)計(jì)規(guī)范:正確重寫這些方法是面向?qū)ο笤O(shè)計(jì)的基本要求。
總結(jié)
到此這篇關(guān)于Java中object類常用方法及應(yīng)用場(chǎng)景的文章就介紹到這了,更多相關(guān)object類常用方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot+nacos+gateway實(shí)現(xiàn)灰度發(fā)布的實(shí)例詳解
灰度發(fā)布是一種在軟件部署過(guò)程中用于平滑過(guò)渡的技術(shù),通過(guò)引入灰度發(fā)布SDK和配置網(wǎng)關(guān)策略實(shí)現(xiàn),本文就來(lái)介紹一下,感興趣的可以了解一下2022-03-03ReentrantReadWriteLock不能鎖升級(jí)的原因總結(jié)
今天給大家?guī)?lái)的是關(guān)于Java并發(fā)的相關(guān)知識(shí),文章圍繞著為什么ReentrantReadWriteLock不能鎖升級(jí)展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06基于SpringBoot啟動(dòng)類靜態(tài)資源路徑問題
這篇文章主要介紹了SpringBoot啟動(dòng)類靜態(tài)資源路徑問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09IO密集型任務(wù)設(shè)置線程池線程數(shù)實(shí)現(xiàn)方式
這篇文章主要介紹了IO密集型任務(wù)設(shè)置線程池線程數(shù)實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07Java Socket實(shí)現(xiàn)UDP編程淺析
類 DatagramSocket 何 DatagramPacket(數(shù)據(jù)包/數(shù)據(jù)報(bào)) 實(shí)現(xiàn)了基于 UDP協(xié)議網(wǎng)絡(luò)程序;UDP數(shù)據(jù)報(bào)通過(guò)數(shù)據(jù)報(bào)套接字 DatagramSocket 發(fā)送和接收,系統(tǒng)不保證 UDP數(shù)據(jù)報(bào)一定能夠安全送達(dá)目的地,也不確定什么時(shí)候可以抵達(dá)2022-11-11最有價(jià)值的50道java面試題 適用于準(zhǔn)入職Java程序員
這篇文章主要為大家分享了最有價(jià)值的50道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,對(duì)hashCode方法的設(shè)計(jì)、垃圾收集的堆和代進(jìn)行剖析,感興趣的小伙伴們可以參考一下2016-05-05