Java中Object類常用的12個方法,你用過幾個?

前言

Java 中的 Object 方法在面試中是一個非常高頻的點,畢竟 Object 是所有類的“老祖宗”。Java 中所有的類都有一個共同的祖先 Object 類,子類都會繼承所有 Object 類中的 public 方法。


Java中Object類常用的12個方法,你用過幾個?

先看下 Object 的類結構(快捷鍵:alt+7):

Java中Object類常用的12個方法,你用過幾個?

1. getClass 方法

final 方法、獲取對象的運行時 class 對象,class 對象就是描述對象所屬類的對象。這個方法通常是和 Java 反射機制搭配使用的。

2. hashCode 方法

該方法主要用於獲取對象的散列值。Object 中該方法默認返回的是對象的堆內存地址。

3. equals 方法

該方法用於比較兩個對象,如果這兩個對象引用指向的是同一個對象,那麼返回 true,否則返回 false。一般 equals 和 == 是不一樣的,但是在 Object 中兩者是一樣的。子類一般都要重寫這個方法。

Java中Object類常用的12個方法,你用過幾個?

4. clone 方法

該方法是保護方法,實現對象的淺複製,只有實現了 Cloneable 接口才可以調用該方法,否則拋出 CloneNotSupportedException 異常。

默認的 clone 方法是淺拷貝。所謂淺拷貝,指的是對象內屬性引用的對象只會拷貝引用地址,而不會將引用的對象重新分配內存。深拷貝則是會連引用的對象也重新創建。

5. toString 方法

返回一個 String 對象,一般子類都有覆蓋。默認返回格式如下:對象的 class 名稱 + @ + hashCode 的十六進制字符串。

6. notify 方法

final 方法,主要用於喚醒在該對象上等待的某個線程。

7. notifyAll 方法

final 方法,主要用於喚醒在該對象上等待的所有線程。

8. wait(long timeout) 方法

wait 方法就是使當前線程等待該對象的鎖,當前線程必須是該對象的擁有者,也就是具有該對象的鎖。wait() 方法一直等待,直到獲得鎖或者被中斷。wait(long timeout) 設定一個超時間隔,如果在規定時間內沒有獲得鎖就返回。

Java中Object類常用的12個方法,你用過幾個?

9. wait(long timeout, int nanos) 方法

public final void wait(long timeout, int nanos) throws InterruptedException {
if (timeout < 0) {
throw new IllegalArgumentException("timeout value is negative");
}

if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}

if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
timeout++;
}

wait(timeout);
}

參數說明

timeout:最大等待時間(毫秒)

nanos:附加時間在毫秒範圍(0-999999)

該方法導致當前線程等待,直到其他線程調用此對象的 notify() 方法或notifyAll()方法,或在指定已經過去的時間。此方法類似於 wait 方法的一個參數,但它允許更好地控制的時間等待一個通知放棄之前的量。實時量,以毫微秒計算,計算公式如下:

在所有其他方面,這種方法與 wait(long timeout) 做同樣的事情。特別是 wait(0, 0) 表示和 wait(0) 相同。

10. wait 方法

可以看到 wait() 方法實際上調用的是 wait(long timeout) 方法,只不過 timeout 為 0,即不等待。

11. finalize 方法

該方法是保護方法,主要用於在 GC 的時候再次被調用,如果我們實現了這個方法,對象可能在這個方法中再次復活,從而避免被 GC 回收。

最後

歡迎大家一起交流,喜歡文章記得關注我點贊轉發喲,感謝支持!


分享到:


相關文章: