JDK8源碼閱讀(一) java.lang.Object

Object類的介紹:

Class Object是類Object結構的根龙巨。 每個班都有Object作為超類。 所有對象(包括數(shù)組)都實現(xiàn)了這個類的方法。

Object類的方法

5MS)DL_8Q2MJYBX55_IRW2Q.png

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í)行。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末晨逝,一起剝皮案震驚了整個濱河市蛾默,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咏花,老刑警劉巖趴生,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異昏翰,居然都是意外死亡苍匆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門棚菊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浸踩,“玉大人,你說我怎么就攤上這事统求〖焱耄” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵码邻,是天一觀的道長折剃。 經(jīng)常有香客問我,道長像屋,這世上最難降的妖魔是什么怕犁? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮己莺,結果婚禮上奏甫,老公的妹妹穿的比我還像新娘。我一直安慰自己凌受,他們只是感情好阵子,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胜蛉,像睡著了一般挠进。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上誊册,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天奈梳,我揣著相機與錄音,去河邊找鬼解虱。 笑死,一個胖子當著我的面吹牛漆撞,可吹牛的內容都是我干的殴泰。 我是一名探鬼主播于宙,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悍汛!你這毒婦竟也來了捞魁?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤离咐,失蹤者是張志新(化名)和其女友劉穎谱俭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宵蛀,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡昆著,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了术陶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凑懂。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖梧宫,靈堂內的尸體忽然破棺而出接谨,到底是詐尸還是另有隱情,我是刑警寧澤塘匣,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布脓豪,位于F島的核電站,受9級特大地震影響忌卤,放射性物質發(fā)生泄漏扫夜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一埠巨、第九天 我趴在偏房一處隱蔽的房頂上張望历谍。 院中可真熱鬧,春花似錦辣垒、人聲如沸望侈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脱衙。三九已至,卻和暖如春例驹,著一層夾襖步出監(jiān)牢的瞬間捐韩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工鹃锈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荤胁,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓屎债,卻偏偏與公主長得像仅政,于是被迫代替她去往敵國和親垢油。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351