Object是所有類的父類,任何類都默認繼承Object。Object類到底實現(xiàn)了哪些方法?
1.clone方法
保護方法,實現(xiàn)對象的淺復(fù)制,只有實現(xiàn)了Cloneable接口才可以調(diào)用該方法,否則拋出異常。
2.getClass方法
final方法,獲得運行時類型。
3.toString方法
該方法用得比較多,一般子類都有覆蓋。
4.finalize方法
該方法用于釋放資源。因為無法確定該方法什么時候被調(diào)用,很少使用。
5.equals方法
該方法是非常重要的一個方法。一般equals和==是不一樣的,但是在Object中兩者是一樣的。子類一般都要重寫這個方法。
6.hashCode方法
該方法用于哈希查找,重寫了equals方法一般都要重寫hashCode方法。這個方法在一些具有哈希功能的Collection中用到。
一般必須滿足obj1.equals(obj2)==true??梢酝瞥鰋bj1.hash-
Code()==obj2.hashCode(),但是hashCode相等不一定就滿足equals。不過為了提高效率,應(yīng)該盡量使上面兩個條件接近等價。
7.wait方法
wait方法就是使當前線程等待該對象的鎖,當前線程必須是該對象的擁有者,也就是具有該對象的鎖。wait()方法一直等待,直到獲得鎖或者被中斷。wait(long
timeout)設(shè)定一個超時間隔,如果在規(guī)定時間內(nèi)沒有獲得鎖就返回。
調(diào)用該方法后當前線程進入睡眠狀態(tài),直到以下事件發(fā)生。
(1)其他線程調(diào)用了該對象的notify方法。
(2)其他線程調(diào)用了該對象的notifyAll方法。
(3)其他線程調(diào)用了interrupt中斷該線程。
(4)時間間隔到了。
此時該線程就可以被調(diào)度了,如果是被中斷的話就拋出一個InterruptedException異常。
8.notify方法
該方法喚醒在該對象上等待的某個線程。
9.notifyAll方法
該方法喚醒在該對象上等待的所有線程。
試問的最多的問題是:“”。
一般情況下,3年以上工作經(jīng)驗的回答少于6個方法的,會導(dǎo)致減分,2年以下工作經(jīng)驗的知道6個以上會加分。到阿里云后面試過30+,回答讓我滿意的人很少。
作為一個半路出家當程序員,開始我總是癡迷于應(yīng)用。a框架的配置,b框架的模板,c框架的控制……其實我對Java底層了解的很少,也沒有想過了解java的底層。
觸動我去看Object類的是幾件事。 在上個東家做消息全網(wǎng)傳輸?shù)臅r候,我用BeanUtil.copyProperties()拷貝對象的值,覺得很爽,后面某同事review我的代碼提示我可以覆寫對象的clone()方法的,畢竟,反射的效率是比較低的。
然后當我去做的時候,發(fā)現(xiàn)了更好的選擇。然后在打印日志的時候,我習慣拼接屬性,于是又被提示覆寫toString()方法是包爽的,就這樣,我認識了Object的2個方法。
看《Effecive Java》這本書,中間提到“為什么覆寫equals()方法的時候總是要覆寫hashcode()”。開始第一遍沒有看懂,也懶得管了,因為hashcode我用的少,后來去參加一個面試,被人問到的時候,感覺無比的尷尬,我讀過,卻不知道答案!這是個人總結(jié)能力的問題,后面又不能不回來仔細看看這2個方法到底是做什么的。
關(guān)于線程的notify() , notifyAll() , wait()『3個』 方法,學習線程的時候看過,不過自從用了JUC的包,我基本沒有在代碼中使用過了。每次用eclipse的“alt + /” 快捷鍵從后翻總能看到,所以無論如何,這幾個方法應(yīng)該知道。
寫到這里,有7個方法了,這幾個方法很容易想到,在我開發(fā)java2年后,能夠回答Object類中的7個方法。其實clone()方法不常用,所以,我 說的數(shù)字6是有依據(jù)的。
這6個方法,作為java程序員,天天不見也會見幾次。如果寫了幾年java代碼不知道基類里面的方法,就算你Hbase玩的再 熟,我憑什么相信你能寫優(yōu)質(zhì)代碼?如果一個在農(nóng)村蓋房子3年的砌匠不知道前后梁有多少瓴子(魯班收徒的故事),您會怎么想?。
protected Object clone()創(chuàng)建并返回此對象的一個副本。
boolean equals(Object obj)指示其他某個對象是否與此對象“相等”。 protected void finalize()當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調(diào)用此方法。
Class<?> getClass()返回此 Object 的運行時類。 int hashCode()返回該對象的哈希碼值。
void notify()喚醒在此對象監(jiān)視器上等待的單個線程。 void notifyAll()喚醒在此對象監(jiān)視器上等待的所有線程。
String toString()返回該對象的字符串表示。 void wait()在其他線程調(diào)用此對象的 notify() 方法或 notifyAll() 方法前,導(dǎo)致當前線程等待。
void wait(long timeout)在其他線程調(diào)用此對象的 notify() 方法或 notifyAll() 方法,或者超過指定的時間量前,導(dǎo)致當前線程等待。 void wait(long timeout, int nanos)在其他線程調(diào)用此對象的 notify() 方法或 notifyAll() 方法,或者其他某個線程中斷當前線程,或者已超過某個實際時間量前,導(dǎo)致當前線程等待。
Object是所有類的父類,任何類都默認繼承Object。
Object類到底實現(xiàn)了哪些方法?1.clone方法保護方法,實現(xiàn)對象的淺復(fù)制,只有實現(xiàn)了Cloneable接口才可以調(diào)用該方法,否則拋出異常。2.getClass方法final方法,獲得運行時類型。
3.toString方法該方法用得比較多,一般子類都有覆蓋。4.finalize方法該方法用于釋放資源。
因為無法確定該方法什么時候被調(diào)用,很少使用。5.equals方法該方法是非常重要的一個方法。
一般equals和==是不一樣的,但是在Object中兩者是一樣的。子類一般都要重寫這個方法。
6.hashCode方法該方法用于哈希查找,重寫了equals方法一般都要重寫hashCode方法。這個方法在一些具有哈希功能的Collection中用到。
一般必須滿足obj1.equals(obj2)==true??梢酝瞥鰋bj1.hash-Code()==obj2.hashCode(),但是hashCode相等不一定就滿足equals。
不過為了提高效率,應(yīng)該盡量使上面兩個條件接近等價。7.wait方法wait方法就是使當前線程等待該對象的鎖,當前線程必須是該對象的擁有者,也就是具有該對象的鎖。
wait()方法一直等待,直到獲得鎖或者被中斷。wait(longtimeout)設(shè)定一個超時間隔,如果在規(guī)定時間內(nèi)沒有獲得鎖就返回。
調(diào)用該方法后當前線程進入睡眠狀態(tài),直到以下事件發(fā)生。(1)其他線程調(diào)用了該對象的notify方法。
(2)其他線程調(diào)用了該對象的notifyAll方法。(3)其他線程調(diào)用了interrupt中斷該線程。
(4)時間間隔到了。此時該線程就可以被調(diào)度了,如果是被中斷的話就拋出一個InterruptedException異常。
8.notify方法該方法喚醒在該對象上等待的某個線程。9.notifyAll方法該方法喚醒在該對象上等待的所有線程。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學習鳥. 頁面生成時間:2.802秒