面試被問Object有哪些方法?

面試被問Object有哪些方法,更有奇葩的問Object有幾個方法,本人覺得問前面的問題是可以接受,問有幾個方法就有點過分了。

如果被問Object有哪些方法,那麼可以針對性的一個一個來說,因爲Object中有些方法也不是很有必要知道,但是常見的方法背面是的人說不知道,那就有些過分了。下面就說說Object常見方法:

477ab8696e581989e968bd3913f09faf.png

Object是所有類的父類,任何類都默認繼承Object。具體Object的包名全路徑爲java.lang.Object,存在於rt.jar包中。下面是對應方法的含義:

clone方法

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

getClass方法

final方法,獲得Object運行時類型。

   public static void main(String[] args) {       Object object=new Object();       System.out.println(object.getClass());   }

輸出:class java.lang.Object

toString方法

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

public static void main(String[] args) {       Object object=new Object();       System.out.println(object.toString());   }

輸出:java.lang.Object@30f39991

finalize方法

該方法和垃圾收集器有關係,判斷一個對象是否可以被回收的最後一步就是判斷是否重寫了此方法。

equals方法

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

hashCode方法

該方法用於哈希查找,重寫了equals方法一般都要重寫hashCode方法。這個方法在一些具有哈希功能的Collection中用到。

一般必須滿足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就滿足equals。不過爲了提高效率,應該儘量使上面兩個條件接近等價。

  • JDK1.6、1.7默認是返回隨機數

  • JDK1.8默認是通過和當前線程有關的一個隨機數+三個確定值,運用Marsaglia’s xorshift scheme隨機數算法得到的一個隨機數

  public static void main(String[] args) {       Object object=new Object();       System.out.println(object.hashCode());   }

輸出:821270929

wait方法

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

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

(1)其他線程調用了該對象的notify方法。

(2)其他線程調用了該對象的notifyAll方法。

(3)其他線程調用了interrupt中斷該線程。

(4)時間間隔到了。

此時該線程就可以被調度了,如果是被中斷的話就拋出一個InterruptedException異常。notify方法

配合synchronized使用,該方法喚醒在該對象上等待隊列中的某個線程。(同步隊列中的線程是給搶佔CPU的線程,等待隊列中的線程指的是等待喚醒的線程)

notifyAll方法

配合synchronized使用,該方法喚醒在該對象上等待隊列中的所有線程。(同步隊列中的線程是給搶佔CPU的線程,等待隊列中的線程指的是等待喚醒的線程)。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章