Object類的介紹:
Class Object是類Object結構的根龙巨。 每個班都有Object作為超類。 所有對象(包括數(shù)組)都實現(xiàn)了這個類的方法。
Object類的方法
1. registerNatives()
1.1 本地方法是聯(lián)系Java程序和底層主機操作系統(tǒng)的連接方法暑诸。
2. clone()
2.1
protected Object clone()throws CloneNotSupportedException
按照慣例,返回的對象應該通過調用super.clone獲得东羹。 如果一個類和它的所有超類(除了Object )遵守這個慣例,那將是x.clone().getClass() == x.getClass()的情況忠烛。
按照慣例属提,此方法返回的對象應該與此對象(正被克隆)無關美尸。 為了實現(xiàn)這一獨立性冤议,可能需要修改super.clone返回的對象的一個或多個字段。 通常火惊,這意味著復制構成被克隆的對象的內部“深層結構”的任何可變對象求类,并通過引用該副本替換對這些對象的引用。 如果一個類僅包含原始字段或對不可變對象的引用屹耐,則通常情況下尸疆, super.clone返回的對象中的字段通常不需要修改。
clone的方法Object執(zhí)行特定的克隆操作惶岭。 首先寿弱,如果此對象的類不實現(xiàn)接口Cloneable ,則拋出CloneNotSupportedException 按灶。 請注意症革,所有數(shù)組都被認為是實現(xiàn)接口Cloneable ,并且數(shù)組類型T[]的clone方法的返回類型是T[] 鸯旁,其中T是任何引用或原始類型噪矛。 否則,該方法將創(chuàng)建該對象的類的新實例铺罢,并將其所有字段初始化為完全符合該對象的相應字段的內容艇挨,就像通過賦值一樣。 這些字段的內容本身不被克隆韭赘。 因此缩滨,該方法執(zhí)行該對象的“淺拷貝”,而不是“深度拷貝”操作泉瞻。
Object類本身并不實現(xiàn)接口Cloneable 脉漏,因此在類別為Object的對象上調用clone方法將導致運行時拋出異常。
3. equals
3.1.public boolean equals(Object obj)
3.2
equals方法在非空對象引用上實現(xiàn)等價關系:
自反性 :對于任何非空的參考值x 袖牙, x.equals(x)應該返回true 侧巨。
它是對稱的 :對于任何非空引用值x和y , x.equals(y)應該返回true當且僅當y.equals(x)回報true 贼陶。
傳遞性 :對于任何非空引用值x 刃泡, y和z 巧娱,如果x.equals(y)回報true個y.equals(z)回報true ,然后x.equals(z)應該返回true 烘贴。
它是一致的 :對于任何非空引用值x和y 禁添,多次調用x.equals(y)始終返回true或始終返回false ,沒有設置中使用的信息equals比較上的對象被修改桨踪。
對于任何非空的參考值x 老翘, x.equals(null)應該返回false 。
4. finalize
4.1 protected void finalize() throws Throwable
4.2
當垃圾收集確定不再有對該對象的引用時锻离,垃圾收集器在對象上調用該對象铺峭。 一個子類覆蓋了處理系統(tǒng)資源或執(zhí)行其他清理的finalize方法。
finalize的一般合同是汽纠,如果Java¢虛擬機已經(jīng)確定不再有任何方法可以被任何尚未死亡的線程訪問的方法被調用卫键,除非是由于最后確定的其他對象或類的準備工作所采取的行動。 finalize方法可以采取任何行動虱朵,包括使此對象再次可用于其他線程; 然而莉炉, finalize的通常目的是在對象不可撤銷地丟棄之前執(zhí)行清除動作。 例如碴犬,表示輸入/輸出連接的對象的finalize方法可能會在對象被永久丟棄之前執(zhí)行顯式I / O事務來中斷連接.
5. getClass
5.1 public final 類<?> getClass()
5.2
返回此Object的運行時類絮宁。 返回的類對象是被表示類的static synchronized方法鎖定的對象。
6.hashCode
6.1 public int hashCode()
6.2
只要在執(zhí)行Java應用程序時多次在同一個對象上調用該方法服协, hashCode方法必須始終返回相同的整數(shù)绍昂,前提是修改了對象中equals比較中的信息。 該整數(shù)不需要從一個應用程序的執(zhí)行到相同應用程序的另一個執(zhí)行保持一致偿荷。
如果根據(jù)equals(Object)方法兩個對象相等窘游,則在兩個對象中的每個對象上調用hashCode方法必須產(chǎn)生相同的整數(shù)結果。
7. notify
7.1 public final void notify()
7.2
喚醒正在等待對象監(jiān)視器的單個線程跳纳。 如果任何線程正在等待這個對象张峰,其中一個被選擇被喚醒。 選擇是任意的棒旗,并且由實施的判斷發(fā)生。 線程通過調用wait方法之一等待對象的監(jiān)視器撩荣。
8.notifyAll
8.1 public final void notifyAll()
8.2
喚醒正在等待對象監(jiān)視器的所有線程铣揉。 線程通過調用wait方法之一等待對象的監(jiān)視器。
9. toString
9.1 public String toString()
9.2
返回對象的字符串表示形式餐曹。 一般來說逛拱, toString方法返回一個“textually代表”這個對象的字符串。 結果應該是一個簡明扼要的表達台猴,容易讓人閱讀朽合。 建議所有子類覆蓋此方法俱两。
該toString類方法Object返回一個由其中的對象是一個實例,該符號字符`的類的名稱的字符串@ ”和對象的哈希碼的無符號的十六進制表示曹步。 換句話說宪彩,這個方法返回一個等于下列值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
10. wait()
10.1 public final void wait() throws InterruptedException
10.2
導致當前線程等待,直到另一個線程調用該對象的notify()方法或notifyAll().換句話說讲婚,這個方法的行為就好像簡單地執(zhí)行呼叫wait(0) 尿孔。
當前線程必須擁有此對象的監(jiān)視器。線程釋放此監(jiān)視器的所有權筹麸,并等待直到另一個線程通過調用notify方法或notifyall方法通知等待此對象監(jiān)視器的線程喚醒活合。然后線程等待,直到它可以重新獲得監(jiān)視器的所有權并繼續(xù)執(zhí)行物赶。
11. wait(long timeout)
11.1 public final void wait(long timeout) throws InterruptedException
11.2
導致當前線程等待白指,直到另一個線程調用該對象的notify()方法或notifyAll()或指定的時間已過
此方法使當前線程將自身置于此對象的等待集中,然后放棄此對象上的所有同步聲明酵紫。出于線程調度目的告嘲,線程將被禁用,并處于休眠狀態(tài)憨闰,直到發(fā)生以下四種情況之一:
1. 其他一些線程調用此對象的notify方法状蜗,而線程恰好被任意選擇為要喚醒的線程;
2. 其他一些線程為此對象調用notifyall方法;
3. 其它一些線程interrupt方法終端當前線程;
4. 指定的實時時間已過鹉动,或多或少轧坎。但是,如果超時為零泽示,則不考慮實時性缸血,線程只需等待通知;
12. wait(long timeout,int nanos)
12.1 public final void wait(long timeout,int nanos) throws InterruptedException
12.2
使當前線程等待,直到另一個線程為此對象調用notify方法或notifyall方法械筛,或某個其他線程中斷當前線程捎泻,或經(jīng)過一定的實時時間
此方法類似于一個參數(shù)的wait方法,但它允許更好地控制在放棄之前等待通知的時間埋哟。以納秒為單位的實時量表示為:1000000*timeout+nanos(納秒)笆豁。在所有其他方面,此方法與一個參數(shù)的方法wait(long)執(zhí)行相同的操作赤赊。特別地闯狱,wait(0,0)與wait(0)的含義相同抛计;
當前的線程必須擁有該對象的顯示器哄孤。 線程釋放此監(jiān)視器的所有權,并等待直到發(fā)生以下兩種情況之一:
另一個線程通知等待該對象的監(jiān)視器的線程通過調用notify方法或notifyAll方法來喚醒吹截。
由timeout毫秒加nanos納秒?yún)?shù)指定的超時時間已過瘦陈。
然后線程等待凝危,直到它可以重新獲得監(jiān)視器的所有權并恢復執(zhí)行。