(一)Object類源碼解析

1.定義
Object類是Java中所有類的根,是所有類的超類。所有的類對象,包括Java數(shù)組(數(shù)組也是引用),都實現(xiàn)Object類的方法。

2.API解析

public final native Class<?> getClass()
返回這個對象運行時的類對象,該類對象是被代表的類的static synchronized方法鎖定的對象。
public native int hashCode()
返回對象的哈希碼。
public boolean equals(Object obj) {  
  return (this == obj);  
}
比較兩個對象是否相等。
protected native Object clone() throws CloneNotSupportedException
創(chuàng)建并返回該對象的一個拷貝(Shallow-Copy)。這個“拷貝”的精確含義取決于該對象的類。
public String toString() {
     return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
返回對象的字符串表示形式。建議所有的子類都要重寫Object類的toString()方法。
public final native void notify();
喚醒正在此對象監(jiān)視器(monitor)上等待的單個線程。如果有任何線程在此對象上等待,則選擇其中一個喚醒,選擇是任意的,并且可以根據(jù)實現(xiàn)情況進行選擇。
在當前線程放棄對象鎖(monitor)之前,喚醒的線程將無法運行。喚醒的線程將以通常的方式與其他在此對象上進行同步操作的線程競爭該對象的鎖,以獲取同步資源。
notify方法只能由擁有對象監(jiān)視器(monitor)的線程調(diào)用,否則將拋出IllegalMonitorStateException異常。
一個線程成為對象監(jiān)視器(monitor)的所有者有三種方式:
(1).通過執(zhí)行該對象的同步(synchronized method)實例方法
  eg:synchronized修飾普通同步方法。此時鎖的是當前實例的對象。
          public synchronized void synMethod(){ 
                    //do something
          }
(2).通過執(zhí)行在對象上同步(synchronized(object))的語句的主體
  eg:synchronized修飾同步代碼塊。此時鎖的是括號內(nèi)的對象。
          public void synMethod() {
                synchronized (this){
                    //do something
                }
          }
(3).對于類型為Class的對象,執(zhí)行該類的靜態(tài)同步(static synchronized)方法
  eg:synchronized修飾靜態(tài)同步方法。此時鎖的是類的class對象。
          public static synchronized void synMethod(){
                  //do something
          }
public final native void notifyAll();
喚醒正在此對象監(jiān)視器(monitor)上等待的所有線程。
public final native void wait(long timeout) throws InterruptedException;
使當前線程等待,直到另一個線程為此對象調(diào)用notify或notifyAll方法或等待超過指定的超時時間。
當前線程必須擁有對象監(jiān)視器(monitor)或?qū)ο箧i。
wait方法使當前線程T將自身置于該監(jiān)控對象的等待集中,然后放棄對該對象的所有同步聲明。
出于線程調(diào)度的目的,線程T被禁用且處于休眠狀態(tài),直到發(fā)生四件事情之一:
(1).其他一些線程為此對象調(diào)用notify方法,并且恰好選擇線程T作為要喚醒的線程;
(2).其他一些線程為此對象調(diào)用notifyAll方法;
(3).其他一些線程中斷(Thread.interrupt())線程T;
(4).timeout超時時間過期。
注:如果當前線程在等待之前或者等待時被任何線程中斷Thread.interrupt(),則拋出InterruptedException異常。
public final void wait(long timeout, int nanos) throws InterruptedException {
        if (timeout < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }
        if (nanos < 0 || nanos > 999999) {
            throw new IllegalArgumentException(
                                "nanosecond timeout value out of range");
        }
        if (nanos > 0) {
            timeout++;
        }
        wait(timeout);
    }
使當前線程等待,直到另一個線程為此對象調(diào)用notify或notifyAll方法或等待超過指定的超時時間。
public final void wait() throws InterruptedException {
      wait(0);
}
使當前線程等待,直到另一個線程為此對象調(diào)用notify或notifyAll方法。
protected void finalize() throws Throwable { }
當垃圾回收器確定不再有該對象的引用時,由垃圾回收器在對象上調(diào)用finalize方法回收對象。

原創(chuàng)不易,如需轉(zhuǎn)載,請注明出處@author Davince!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 概要 64學時 3.5學分 章節(jié)安排 電子商務網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,875評論 0 3
  • 虛擬機把描述類的數(shù)據(jù)從Class文件加載到內(nèi)存, 并對數(shù)據(jù)進行校驗、轉(zhuǎn)換解析和初始化, 最終形成可以被虛擬機直接使...
    好好學習Sun閱讀 1,382評論 0 3
  • 群里早就有人開始喊:飄雪啦。我去陽臺一看,沒有呀。視力好的就說,要睜大眼才能看到。我視力不好,所以沒看到。 不等了...
    秀琴sukin閱讀 229評論 0 1
  • 我曾做過一個小夢,怪他一聲不響地忽然走了,他現(xiàn)在故意慢慢走,讓我一程一程送,盡量多聚聚,把一個小夢拉成一個萬里長夢...
    芳香四溢_b2ae閱讀 357評論 5 7
  • 寫作群里,群主報大人曾分享自己拍的紀錄片:龍?zhí)端囆g節(jié),那些極樸實自然的鏡頭,卻別有一番動人處。 從紀錄片中,除了可...
    葉枝coco閱讀 438評論 0 3

友情鏈接更多精彩內(nèi)容