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

Object類的介紹:

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

Object類的方法

5MS)DL_8Q2MJYBX55_IRW2Q.png

1. registerNatives()

1.1 本地方法是聯系Java程序和底層主機操作系統的連接方法。

2. clone()

2.1
protected Object clone()throws CloneNotSupportedException

按照慣例,返回的對象應該通過調用super.clone獲得。 如果一個類和它的所有超類(除了Object )遵守這個慣例,那將是x.clone().getClass() == x.getClass()的情況。

按照慣例,此方法返回的對象應該與此對象(正被克隆)無關。 為了實現這一獨立性,可能需要修改super.clone返回的對象的一個或多個字段。 通常,這意味著復制構成被克隆的對象的內部“深層結構”的任何可變對象,并通過引用該副本替換對這些對象的引用。 如果一個類僅包含原始字段或對不可變對象的引用,則通常情況下, super.clone返回的對象中的字段通常不需要修改。

clone的方法Object執行特定的克隆操作。 首先,如果此對象的類不實現接口Cloneable ,則拋出CloneNotSupportedException 。 請注意,所有數組都被認為是實現接口Cloneable ,并且數組類型T[]的clone方法的返回類型是T[] ,其中T是任何引用或原始類型。 否則,該方法將創建該對象的類的新實例,并將其所有字段初始化為完全符合該對象的相應字段的內容,就像通過賦值一樣。 這些字段的內容本身不被克隆。 因此,該方法執行該對象的“淺拷貝”,而不是“深度拷貝”操作。

Object類本身并不實現接口Cloneable ,因此在類別為Object的對象上調用clone方法將導致運行時拋出異常。

3. equals

3.1.public boolean equals(Object obj)

3.2
equals方法在非空對象引用上實現等價關系:

自反性 :對于任何非空的參考值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

當垃圾收集確定不再有對該對象的引用時,垃圾收集器在對象上調用該對象。 一個子類覆蓋了處理系統資源或執行其他清理的finalize方法。
finalize的一般合同是,如果Java¢虛擬機已經確定不再有任何方法可以被任何尚未死亡的線程訪問的方法被調用,除非是由于最后確定的其他對象或類的準備工作所采取的行動。 finalize方法可以采取任何行動,包括使此對象再次可用于其他線程; 然而, finalize的通常目的是在對象不可撤銷地丟棄之前執行清除動作。 例如,表示輸入/輸出連接的對象的finalize方法可能會在對象被永久丟棄之前執行顯式I / O事務來中斷連接.

5. getClass

5.1 public final 類<?> getClass()
5.2

返回此Object的運行時類。 返回的類對象是被表示類的static synchronized方法鎖定的對象。

6.hashCode

6.1 public int hashCode()
6.2

只要在執行Java應用程序時多次在同一個對象上調用該方法, hashCode方法必須始終返回相同的整數,前提是修改了對象中equals比較中的信息。 該整數不需要從一個應用程序的執行到相同應用程序的另一個執行保持一致。
如果根據equals(Object)方法兩個對象相等,則在兩個對象中的每個對象上調用hashCode方法必須產生相同的整數結果。

7. notify

7.1 public final void notify()
7.2

喚醒正在等待對象監視器的單個線程。 如果任何線程正在等待這個對象,其中一個被選擇被喚醒。 選擇是任意的,并且由實施的判斷發生。 線程通過調用wait方法之一等待對象的監視器。

8.notifyAll

8.1 public final void notifyAll()

8.2

喚醒正在等待對象監視器的所有線程。 線程通過調用wait方法之一等待對象的監視器。

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().換句話說,這個方法的行為就好像簡單地執行呼叫wait(0) 。
當前線程必須擁有此對象的監視器。線程釋放此監視器的所有權,并等待直到另一個線程通過調用notify方法或notifyall方法通知等待此對象監視器的線程喚醒。然后線程等待,直到它可以重新獲得監視器的所有權并繼續執行。

11. wait(long timeout)

11.1 public final void wait(long timeout) throws InterruptedException
11.2

導致當前線程等待,直到另一個線程調用該對象的notify()方法或notifyAll()或指定的時間已過
此方法使當前線程將自身置于此對象的等待集中,然后放棄此對象上的所有同步聲明。出于線程調度目的,線程將被禁用,并處于休眠狀態,直到發生以下四種情況之一:
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方法,或某個其他線程中斷當前線程,或經過一定的實時時間
此方法類似于一個參數的wait方法,但它允許更好地控制在放棄之前等待通知的時間。以納秒為單位的實時量表示為:1000000*timeout+nanos(納秒)。在所有其他方面,此方法與一個參數的方法wait(long)執行相同的操作。特別地,wait(0,0)與wait(0)的含義相同;
當前的線程必須擁有該對象的顯示器。 線程釋放此監視器的所有權,并等待直到發生以下兩種情況之一:

另一個線程通知等待該對象的監視器的線程通過調用notify方法或notifyAll方法來喚醒。
由timeout毫秒加nanos納秒參數指定的超時時間已過。
然后線程等待,直到它可以重新獲得監視器的所有權并恢復執行。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380