面試被問Object有哪些方法,更有奇葩的問Object有幾個方法,本人以爲問前面的問題是能夠接受,問有幾個方法就有點過度了。
java
若是被問Object有哪些方法,那麼能夠針對性的一個一個來講,由於Object中有些方法也不是頗有必要知道,可是常見的方法背面是的人說不知道,那就有些過度了。下面就說說Object常見方法:
面試
Object是全部類的父類,任何類都默認繼承Object。具體Object的包名全路徑爲java.lang.Object
,存在於rt.jar包中。下面是對應方法的含義:算法
保護方法,實現對象的淺複製,只有實現了Cloneable
接口才能夠調用該方法,不然拋出CloneNotSupportedException
異常。ide
getClass
方法final方法,得到Object運行時類型。spa
public static void main(String[] args) { Object object=new Object(); System.out.println(object.getClass()); }
輸出:class java.lang.Object
線程
toString
方法3d
該方法用得比較多,通常子類都有覆蓋。code
public static void main(String[] args) { Object object=new Object(); System.out.println(object.toString()); }
輸出:java.lang.Object@30f39991
orm
finalize
方法對象
該方法和垃圾收集器有關係,判斷一個對象是否能夠被回收的最後一步就是判斷是否重寫了此方法。
equals
方法該方法是很是重要的一個方法。通常equals和==是不同的,可是在Object中二者是同樣的。子類通常都要重寫這個方法。
hashCode
方法該方法用於哈希查找,重寫了equals方法通常都要重寫hashCode方法。這個方法在一些具備哈希功能的Collection中用到。
通常必須知足obj1.equals(obj2)==true。能夠推出obj1.hash- Code()==obj2.hashCode(),可是hashCode相等不必定就知足equals。不過爲了提升效率,應該儘可能使上面兩個條件接近等價。
JDK1.六、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的線程,等待隊列中的線程指的是等待喚醒的線程)。