Java中Object類的常用方法小結(jié)
Java Object
類是所有類的父類,位于 java.lang
包中。所有 Java 類默認(rèn)繼承 Object
類,因此它提供了一些基礎(chǔ)方法,這些方法在所有 Java 對(duì)象上都可以使用。
以下是 Object
類中一些常用的方法及其詳細(xì)描述:
1. public boolean equals(Object obj)
- 描述:判斷當(dāng)前對(duì)象與指定的對(duì)象是否相等。默認(rèn)情況下,它比較的是對(duì)象的內(nèi)存地址(即兩個(gè)對(duì)象是否是同一個(gè)實(shí)例)。但通常可以通過(guò)重寫該方法來(lái)自定義對(duì)象比較的方式(如比較對(duì)象的內(nèi)容或字段值)。
- 重寫:如果你需要比較對(duì)象的內(nèi)容而非引用,可以重寫此方法。
示例:
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @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 && name.equals(person.name); // 比較屬性 } public static void main(String[] args) { Person p1 = new Person("Alice", 25); Person p2 = new Person("Alice", 25); System.out.println(p1.equals(p2)); // 輸出: true } }
2. public int hashCode()
描述:返回當(dāng)前對(duì)象的哈希碼。哈希碼用于提高集合框架(如 HashMap
、HashSet
)中對(duì)象的查找效率。通常當(dāng)你重寫 equals
方法時(shí),也應(yīng)該重寫 hashCode
方法,保證兩個(gè)相等的對(duì)象具有相同的哈希碼。
示例:
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public int hashCode() { return Objects.hash(name, age); // 使用屬性計(jì)算哈希碼 } public static void main(String[] args) { Person person = new Person("Alice", 25); System.out.println(person.hashCode()); // 輸出哈希碼 } }
3. public String toString()
描述:返回當(dāng)前對(duì)象的字符串表示。默認(rèn)返回對(duì)象的類名以及對(duì)象的哈希碼(例如:com.example.MyClass@1a2b3c4d
)。通常我們會(huì)重寫該方法,以便返回更加有意義的對(duì)象描述,如輸出對(duì)象的屬性值。
示例:
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } public static void main(String[] args) { Person person = new Person("Alice", 25); System.out.println(person.toString()); // 輸出: Person{name='Alice', age=25} } }
4. public final native Class<?> getClass()
- 描述:返回一個(gè)
Class
對(duì)象,表示當(dāng)前對(duì)象的類類型。通過(guò)這個(gè)方法,可以獲取對(duì)象的運(yùn)行時(shí)類型信息。 - 注意:
getClass()
方法是final
,不能被重寫。
示例:
public class Main { public static void main(String[] args) { String str = "Hello"; Class<?> clazz = str.getClass(); System.out.println(clazz.getName()); // 輸出: java.lang.String } }
5. public void notify()
描述:?jiǎn)拘言诋?dāng)前對(duì)象監(jiān)視器上等待的一個(gè)線程。如果有多個(gè)線程在等待,隨機(jī)喚醒一個(gè)。
使用場(chǎng)景:通常與 synchronized
關(guān)鍵字和 wait()
方法一起使用,用于線程間的通信。
6. public void notifyAll()
描述:?jiǎn)拘言诋?dāng)前對(duì)象監(jiān)視器上等待的所有線程。
使用場(chǎng)景:與 notify()
類似,但它喚醒所有等待的線程。
7. public final void wait() throws InterruptedException
描述:使當(dāng)前線程進(jìn)入等待狀態(tài),直到其他線程調(diào)用 notify()
或 notifyAll()
喚醒它。線程進(jìn)入等待狀態(tài)后,它會(huì)釋放持有的鎖。
使用場(chǎng)景:通常與 synchronized
關(guān)鍵字一起使用,用于線程間的協(xié)作。
8. public final void wait(long timeout) throws InterruptedException
描述:使當(dāng)前線程等待指定的時(shí)間,時(shí)間以毫秒為單位。該方法在指定時(shí)間內(nèi)等待,或者被其他線程調(diào)用 notify()
或 notifyAll()
喚醒。
9. public final void wait(long timeout, int nanos) throws InterruptedException
描述:使當(dāng)前線程等待指定的時(shí)間。與前一個(gè)方法不同,這里提供了更精確的時(shí)間控制,可以通過(guò)納秒部分指定等待的額外時(shí)間。
示例:
public class WaitNotifyExample { public static void main(String[] args) throws InterruptedException { Object lock = new Object(); Thread t1 = new Thread(() -> { synchronized (lock) { try { System.out.println("Thread 1 is waiting"); lock.wait(); // 釋放鎖并等待 System.out.println("Thread 1 is resumed"); } catch (InterruptedException e) { e.printStackTrace(); } } }); Thread t2 = new Thread(() -> { synchronized (lock) { System.out.println("Thread 2 is notifying"); lock.notify(); // 喚醒等待的線程 } }); t1.start(); Thread.sleep(1000); // 確保 t1 先執(zhí)行 t2.start(); } }
10. protected Object clone() throws CloneNotSupportedException
描述:創(chuàng)建并返回當(dāng)前對(duì)象的一個(gè)副本。這個(gè)方法是 protected
,所以默認(rèn)不可訪問(wèn)。如果想讓某個(gè)類的對(duì)象可克隆,必須實(shí)現(xiàn) Cloneable
接口并且重寫此方法。如果類沒有實(shí)現(xiàn) Cloneable
接口,調(diào)用該方法會(huì)拋出 CloneNotSupportedException
。默認(rèn)實(shí)現(xiàn)是淺拷貝。
示例:
public class Person implements Cloneable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } public static void main(String[] args) throws CloneNotSupportedException { Person p1 = new Person("Alice", 25); Person p2 = (Person) p1.clone(); System.out.println(p1.equals(p2)); // 輸出: true } }
11. public boolean instanceof(Object obj)
描述:檢查指定對(duì)象是否是當(dāng)前類或其子類的實(shí)例。用于類型檢查。
12. public static void registerNatives()
描述:用于注冊(cè)本地方法。這個(gè)方法并不是很常用,通常在底層庫(kù)或 Java 虛擬機(jī)的實(shí)現(xiàn)中使用。
13. protected void finalize() throws Throwable
作用:
在垃圾回收器回收對(duì)象之前調(diào)用。可以用于釋放資源。
示例:
public class Resource { @Override protected void finalize() throws Throwable { System.out.println("Resource is being finalized"); super.finalize(); } public static void main(String[] args) { Resource resource = new Resource(); resource = null; // 使對(duì)象成為垃圾 System.gc(); // 觸發(fā)垃圾回收 } }
注意事項(xiàng):
finalize()
方法已被標(biāo)記為廢棄(Java 9+),不建議使用。推薦使用 try-with-resources
或 Cleaner
機(jī)制。
這些方法構(gòu)成了 Java 對(duì)象的基礎(chǔ)操作,尤其在多線程和集合操作中,equals()
、hashCode()
、notify()
、wait()
等方法非常常用。
以上就是Java中Object類的常用方法小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Java Object類常用方法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Boot中使用RabbitMQ 生產(chǎn)消息和消費(fèi)消息的實(shí)例代碼
本文介紹了在SpringBoot中如何使用RabbitMQ進(jìn)行消息的生產(chǎn)和消費(fèi),詳細(xì)闡述了RabbitMQ中交換機(jī)的作用和類型,包括直連交換機(jī)、主題交換機(jī)、扇出交換機(jī)和頭交換機(jī),并解釋了各自的消息路由機(jī)制,感興趣的朋友一起看看吧2024-10-10一文搞懂接口參數(shù)簽名與驗(yàn)簽(附含java python php版)
這篇文章主要為大家介紹了java python php不同版的接口參數(shù)簽名與驗(yàn)簽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06詳解Spring AOP 攔截器的基本實(shí)現(xiàn)
本篇文章主要介紹了詳解Spring AOP 攔截器的基本實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03Maven?自動(dòng)化構(gòu)建的實(shí)現(xiàn)示例
本文主要介紹了Maven?自動(dòng)化構(gòu)建的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05java:程序包javafx.geometry不存在問(wèn)題及解決
這篇文章主要介紹了java:程序包javafx.geometry不存在問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08Mybatis之collection標(biāo)簽中javaType和ofType屬性的區(qū)別說(shuō)明
這篇文章主要介紹了Mybatis之collection標(biāo)簽中javaType和ofType屬性的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12