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