天天看點

面試官:Object類有哪些方法?

面試官:Object類有哪些方法?

方法介紹

1.getClass()

final,native方法,獲得運作時類型。

2.hashCode()

hashCode()方法主要用于hash表,比如HashMap,當集合要添加元素時,大緻按如下步驟:

  1. 先調用該元素的hashCode()方法擷取hashCode,hashCode對數組取模定位到它應該放置的實體位置
  2. 如果這個位置上沒有元素,就直接存儲在這個位置上
  3. 如果這個位置上已經有元素,就調用equals()方法進行比較,相同的話就更新,不相同的話放到連結清單後面

是以重寫equals()方法時,也必須重寫hashCode()方法。如果不這樣做,就會違反Object.hashCode()的規範,導緻無法結合所有基于hash的集合一起正常運作,這樣的集合包括HashMap、HashSet和Hashtable

那為什麼不直接使用equals()進行操作呢?如果隻使用equals(),意味着需要疊代整個集合進行比較操作,如果集合中有1萬個元素,就需要進行1萬次比較,這明顯不可行

3.equals(obj)

該方法是非常重要的一個方法。一般equals和==是不一樣的,但是在Object中兩者是一樣的。子類一般都要重寫這個方法。

4.clone()

保護方法,實作對象的淺複制,隻有實作了Cloneable接口才可以調用該方法,否則抛出CloneNotSupportedException異常。

5.toString()

該方法用得比較多,一般子類都有覆寫。

6.notify()

該方法喚醒在該對象上等待的某個線程。

7.notifyAll()

該方法喚醒在該對象上等待的所有線程。

8.wait()

wait方法就是使目前線程等待該對象的鎖,目前線程必須是該對象的擁有者,也就是具有該對象的鎖。wait()方法一直等待,直到獲得鎖或者被中斷。

調用該方法後目前線程進入睡眠狀态,直到以下事件發生。

  1. 其他線程調用了該對象的notify方法。
  2. 其他線程調用了該對象的notifyAll方法。
  3. 其他線程調用了interrupt中斷該線程。
  4. 時間間隔到了。

此時該線程就可以被排程了,如果是被中斷的話就抛出一個InterruptedException異常

9.wait(long)

wait(long timeout)設定一個逾時間隔,如果在規定時間内沒有獲得鎖就傳回。

10.wait(long, int)

在納秒級别進行更精細的等待控制,一般用不到。

11.finalize()

繼續閱讀