protected Object clone()
創(chuàng )建并返回此對象的一個(gè)副本。
boolean equals(Object obj)
指示其他某個(gè)對象是否與此對象“相等”。
protected void finalize()
當垃圾回收器確定不存在對該對象的更多引用時(shí),由對象的垃圾回收器調用此方法。
ClassgetClass()
返回此 Object 的運行時(shí)類(lèi)。
int hashCode()
返回該對象的哈希碼值。
void notify()
喚醒在此對象監視器上等待的單個(gè)線(xiàn)程。
void notifyAll()
喚醒在此對象監視器上等待的所有線(xiàn)程。
String toString()
返回該對象的字符串表示。
void wait()
在其他線(xiàn)程調用此對象的 notify() 方法或 notifyAll() 方法前,導致當前線(xiàn)程等待。
void wait(long timeout)
在其他線(xiàn)程調用此對象的 notify() 方法或 notifyAll() 方法,或者超過(guò)指定的時(shí)間量前,導致當前線(xiàn)程等待。
void wait(long timeout, int nanos)
在其他線(xiàn)程調用此對象的 notify() 方法或 notifyAll() 方法,或者其他某個(gè)線(xiàn)程中斷當前線(xiàn)程,或者已超過(guò)某個(gè)實(shí)際時(shí)間量前,導
Object是所有類(lèi)的父類(lèi),任何類(lèi)都默認繼承Object。Object類(lèi)到底實(shí)現了哪些方法?
1.clone方法
保護方法,實(shí)現對象的淺復制,只有實(shí)現了Cloneable接口才可以調用該方法,否則拋出異常。
2.getClass方法
final方法,獲得運行時(shí)類(lèi)型。
3.toString方法
該方法用得比較多,一般子類(lèi)都有覆蓋。
4.finalize方法
該方法用于釋放資源。因為無(wú)法確定該方法什么時(shí)候被調用,很少使用。
5.equals方法
該方法是非常重要的一個(gè)方法。一般equals和==是不一樣的,但是在Object中兩者是一樣的。子類(lèi)一般都要重寫(xiě)這個(gè)方法。
6.hashCode方法
該方法用于哈希查找,重寫(xiě)了equals方法一般都要重寫(xiě)hashCode方法。這個(gè)方法在一些具有哈希功能的Collection中用到。
一般必須滿(mǎn)足obj1.equals(obj2)==true。可以推出obj1.hash-
Code()==obj2.hashCode(),但是hashCode相等不一定就滿(mǎn)足equals。不過(guò)為了提高效率,應該盡量使上面兩個(gè)條件接近等價(jià)。
7.wait方法
wait方法就是使當前線(xiàn)程等待該對象的鎖,當前線(xiàn)程必須是該對象的擁有者,也就是具有該對象的鎖。wait()方法一直等待,直到獲得鎖或者被中斷。wait(long
timeout)設定一個(gè)超時(shí)間隔,如果在規定時(shí)間內沒(méi)有獲得鎖就返回。
調用該方法后當前線(xiàn)程進(jìn)入睡眠狀態(tài),直到以下事件發(fā)生。
(1)其他線(xiàn)程調用了該對象的notify方法。
(2)其他線(xiàn)程調用了該對象的notifyAll方法。
(3)其他線(xiàn)程調用了interrupt中斷該線(xiàn)程。
(4)時(shí)間間隔到了。
此時(shí)該線(xiàn)程就可以被調度了,如果是被中斷的話(huà)就拋出一個(gè)InterruptedException異常。
8.notify方法
該方法喚醒在該對象上等待的某個(gè)線(xiàn)程。
9.notifyAll方法
該方法喚醒在該對象上等待的所有線(xiàn)程。
試問(wèn)的最多的問(wèn)題是:“”。
一般情況下,3年以上工作經(jīng)驗的回答少于6個(gè)方法的,會(huì )導致減分,2年以下工作經(jīng)驗的知道6個(gè)以上會(huì )加分。到阿里云后面試過(guò)30+,回答讓我滿(mǎn)意的人很少。
作為一個(gè)半路出家當程序員,開(kāi)始我總是癡迷于應用。a框架的配置,b框架的模板,c框架的控制……其實(shí)我對Java底層了解的很少,也沒(méi)有想過(guò)了解java的底層。
觸動(dòng)我去看Object類(lèi)的是幾件事。 在上個(gè)東家做消息全網(wǎng)傳輸的時(shí)候,我用BeanUtil.copyProperties()拷貝對象的值,覺(jué)得很爽,后面某同事review我的代碼提示我可以覆寫(xiě)對象的clone()方法的,畢竟,反射的效率是比較低的。
然后當我去做的時(shí)候,發(fā)現了更好的選擇。然后在打印日志的時(shí)候,我習慣拼接屬性,于是又被提示覆寫(xiě)toString()方法是包爽的,就這樣,我認識了Object的2個(gè)方法。
看《Effecive Java》這本書(shū),中間提到“為什么覆寫(xiě)equals()方法的時(shí)候總是要覆寫(xiě)hashcode()”。開(kāi)始第一遍沒(méi)有看懂,也懶得管了,因為hashcode我用的少,后來(lái)去參加一個(gè)面試,被人問(wèn)到的時(shí)候,感覺(jué)無(wú)比的尷尬,我讀過(guò),卻不知道答案!這是個(gè)人總結能力的問(wèn)題,后面又不能不回來(lái)仔細看看這2個(gè)方法到底是做什么的。
關(guān)于線(xiàn)程的notify() , notifyAll() , wait()『3個(gè)』 方法,學(xué)習線(xiàn)程的時(shí)候看過(guò),不過(guò)自從用了JUC的包,我基本沒(méi)有在代碼中使用過(guò)了。每次用eclipse的“alt + /” 快捷鍵從后翻總能看到,所以無(wú)論如何,這幾個(gè)方法應該知道。
寫(xiě)到這里,有7個(gè)方法了,這幾個(gè)方法很容易想到,在我開(kāi)發(fā)java2年后,能夠回答Object類(lèi)中的7個(gè)方法。其實(shí)clone()方法不常用,所以,我 說(shuō)的數字6是有依據的。
這6個(gè)方法,作為java程序員,天天不見(jiàn)也會(huì )見(jiàn)幾次。如果寫(xiě)了幾年java代碼不知道基類(lèi)里面的方法,就算你Hbase玩的再 熟,我憑什么相信你能寫(xiě)優(yōu)質(zhì)代碼?如果一個(gè)在農村蓋房子3年的砌匠不知道前后梁有多少瓴子(魯班收徒的故事),您會(huì )怎么想?。
Object是所有類(lèi)的父類(lèi),任何類(lèi)都默認繼承Object。
Object類(lèi)到底實(shí)現了哪些方法?1.clone方法保護方法,實(shí)現對象的淺復制,只有實(shí)現了Cloneable接口才可以調用該方法,否則拋出異常。2.getClass方法final方法,獲得運行時(shí)類(lèi)型。
3.toString方法該方法用得比較多,一般子類(lèi)都有覆蓋。4.finalize方法該方法用于釋放資源。
因為無(wú)法確定該方法什么時(shí)候被調用,很少使用。5.equals方法該方法是非常重要的一個(gè)方法。
一般equals和==是不一樣的,但是在Object中兩者是一樣的。子類(lèi)一般都要重寫(xiě)這個(gè)方法。
6.hashCode方法該方法用于哈希查找,重寫(xiě)了equals方法一般都要重寫(xiě)hashCode方法。這個(gè)方法在一些具有哈希功能的Collection中用到。
一般必須滿(mǎn)足obj1.equals(obj2)==true。可以推出obj1.hash-Code()==obj2.hashCode(),但是hashCode相等不一定就滿(mǎn)足equals。
不過(guò)為了提高效率,應該盡量使上面兩個(gè)條件接近等價(jià)。7.wait方法wait方法就是使當前線(xiàn)程等待該對象的鎖,當前線(xiàn)程必須是該對象的擁有者,也就是具有該對象的鎖。
wait()方法一直等待,直到獲得鎖或者被中斷。wait(longtimeout)設定一個(gè)超時(shí)間隔,如果在規定時(shí)間內沒(méi)有獲得鎖就返回。
調用該方法后當前線(xiàn)程進(jìn)入睡眠狀態(tài),直到以下事件發(fā)生。(1)其他線(xiàn)程調用了該對象的notify方法。
(2)其他線(xiàn)程調用了該對象的notifyAll方法。(3)其他線(xiàn)程調用了interrupt中斷該線(xiàn)程。
(4)時(shí)間間隔到了。此時(shí)該線(xiàn)程就可以被調度了,如果是被中斷的話(huà)就拋出一個(gè)InterruptedException異常。
8.notify方法該方法喚醒在該對象上等待的某個(gè)線(xiàn)程。9.notifyAll方法該方法喚醒在該對象上等待的所有線(xiàn)程。
protected Object clone()創(chuàng )建并返回此對象的一個(gè)副本。
boolean equals(Object obj)指示其他某個(gè)對象是否與此對象“相等”。 protected void finalize()當垃圾回收器確定不存在對該對象的更多引用時(shí),由對象的垃圾回收器調用此方法。
Class<?> getClass()返回此 Object 的運行時(shí)類(lèi)。 int hashCode()返回該對象的哈希碼值。
void notify()喚醒在此對象監視器上等待的單個(gè)線(xiàn)程。 void notifyAll()喚醒在此對象監視器上等待的所有線(xiàn)程。
String toString()返回該對象的字符串表示。 void wait()在其他線(xiàn)程調用此對象的 notify() 方法或 notifyAll() 方法前,導致當前線(xiàn)程等待。
void wait(long timeout)在其他線(xiàn)程調用此對象的 notify() 方法或 notifyAll() 方法,或者超過(guò)指定的時(shí)間量前,導致當前線(xiàn)程等待。 void wait(long timeout, int nanos)在其他線(xiàn)程調用此對象的 notify() 方法或 notifyAll() 方法,或者其他某個(gè)線(xiàn)程中斷當前線(xiàn)程,或者已超過(guò)某個(gè)實(shí)際時(shí)間量前,導致當前線(xiàn)程等待。
1、Object有作為名詞的發(fā)音方式。在這種語(yǔ)境下,它的意思是‘物體’,就是你可以看見(jiàn)并觸摸到的東西。
UFO stands for unidentified flying object.
UFO的意思是不明飛行物。
These are such beautiful objects! I'd like to keep them.
這些東西太好看了!我想要留著(zhù)它們。
2、Object同樣可以表示‘反對’的意思,表達對于某物或某人的不同觀(guān)點(diǎn)。
I object having to wear a helmet when I ride a bike.
我反對當我騎自行車(chē)的時(shí)候必須要戴頭盔。
The team objected to the changes that were going to be made to the project.
該小組反對將要在項目中所做的更改。
擴展資料
一、詞義辨析:aim、goal、purpose、end、target、object、objective
aim從本義“靶子”引申而來(lái),側重比較具體而明確的目標,但常指短期目標。
goal指經(jīng)過(guò)考慮和選擇,需經(jīng)堅持不懈的努力奮斗才能達到的最終目標。
purpose普通用詞,既指以堅決、審慎的行動(dòng)去達到的目的,又指心中渴望要實(shí)際的目標。
end指心目中懷著(zhù)的某種目的,強調結果而非過(guò)程。較正式用詞。
target指射擊的靶,軍事攻擊目標。引申指被攻擊、批評或嘲笑的目標。
object強調個(gè)人或需求而決定的目標、目的。
objective與object基本同義,但語(yǔ)義更廣泛,指具體或很快能達到的目的,也可指軍事目標。書(shū)面用詞。
二、詞義辨析:disagree、differ、object
這些動(dòng)詞均含有“不同意,反對”之意。
disagree指彼此間意見(jiàn)或看法不同,任何言行上的不合。
differ可替換disagree,但語(yǔ)氣較溫和,是disagree的委婉說(shuō)法。
object語(yǔ)氣強烈,側重對某一具體計劃、行為或作法等表示反對。常跟前置詞to連用。
Java.lang.object類(lèi)中有幾個(gè)方法不是final的,我們會(huì )經(jīng)常用重寫(xiě)它們,
protected Object clone() 創(chuàng )建并返回此對象的一個(gè)副本。
boolean equals(Object obj) 指示某個(gè)其他對象是否與此對象“相等”。
protected void finalize() 當垃圾回收器確定不存在對該對象的更多引用時(shí),由對象的垃圾回收器調用此方法。
int hashCode() 返回該對象的哈希碼值。
String toString() 返回該對象的字符串表示。
1、clone()
我們?yōu)槭裁匆胏lone()?
當我們需要一個(gè)與某個(gè)對像時(shí)一模一樣的對像時(shí),但它們又是相互獨立的,對它們各自的操作不會(huì )影響到另外的一個(gè),這時(shí)候用clone()就可以
實(shí)現,當然,其他的方法也可以實(shí)現,但是重寫(xiě)clone()簡(jiǎn)單,高效
有一個(gè)不沒(méi)重寫(xiě)clone()的例子,能幫助我們更好的去理解clone(),如下:
public class Test
{
public static void main(String[] args){
A a1=new A();
A a2=new A();
a1.name="a1";
a2=a1;
a2.name="a2";
System.out.println("a1.name="+a1.name);
System.out.println("a2.name="+a2.name);
}
}
class A
{
public String name;
}
輸出結果為:a1.name=a2;
a2.name=a2;
下面這個(gè)是重寫(xiě)了clone()的例子
public class Test
{
public static void main(String[] args) throws {
A a1=new A();
A a2=new A();
a1.name="a1";
a2=(A) a1.clone();
a2.name="a2";
System.out.println("a1.name="+a1.name);
System.out.println("a2.name="+a2.name);
}
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:3.248秒