基礎類學習1-Obejct
一、介紹
Object類是存在於java.lang包下面。Object類其他所有類的基類。
二、結構
上述共包含12個方法,其中有Java實現的原生方法和其他語言實現的Native方法
1、registerNatives()方法
相關概念點:native、static塊
private static native void registerNatives();
static { registerNatives(); }
Java中,用native關鍵字修飾的函式表明該方法的實現並不是在Java中去完成,而是由C/C++去完成,並被編譯成了.dll,由Java去呼叫。方法的具體實現體在dll檔案中,對於不同平臺,其具體實現有所不同。用native修飾,即表示作業系統,需要提供此方法,Java本身需要使用。具體到registerNatives()方法本身,其主要作用是將C/C++中的方法對映到Java中的native方法,實現方法命名的解耦。
2、getClass() 方法
相關概念點:final、反射
public final native Class<?> getClass();
返回此Object
的執行時類。 返回的類
物件是被表示類的static synchronized
方法鎖定的物件。
實際結果的型別是Class<? extends |X|>
其中|X|
是靜態型別上其表達的擦除getClass
被呼叫。
3、hashcode方法
相關概念點:雜湊存在的意義、雜湊碰撞及其解決方法
public native int hashCode();
返回物件的雜湊碼值
4、equals()方法
相關概念點:equals與==的區別
public boolean equals(Object obj) { return (this == obj); }
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 。
該equals類方法Object實現物件上差別可能性最大的相等關係; 也就是說,對於任何非空的參考值x和y ,當且僅當x和y引用相同的物件( x == y具有值true )時,該方法返回true 。
5、clone方法
protected native Object clone() throws CloneNotSupportedException;
建立並返回此物件的副本
CloneNotSupportedException - 如果物件的類不支援Cloneable介面。 覆蓋clone方法的子類也可以丟擲此異常以指示例項無法克隆。
6、toString()方法
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
返回物件的字串表示形式。
該toString類方法Object返回一個由其中的物件是一個例項,該符號字元`的類的名稱的字串@ ”和物件的雜湊碼的無符號的十六進位制表示。 換句話說,這個方法返回一個等於下列值的字串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
7、notify()方法
public final native void notify();
喚醒正在等待物件監視器的單個執行緒。 如果任何執行緒正在等待這個物件,其中任意一個被選擇被喚醒。
該方法只能由作為該物件的監視器的所有者的執行緒呼叫。 執行緒以三種方式之一成為物件監視器的所有者:
通過執行該物件的同步例項方法。
通過執行在物件上synchronized synchronized語句的正文。
對於型別為Class,的物件,通過執行該類的同步靜態方法。
一次只能有一個執行緒可以擁有一個物件的顯示器。
8、notifyAll()方法
public final native void notifyAll();
喚醒正在等待物件監視器的所有執行緒。
9、wait()方法
public final native void wait(long timeout) throws InterruptedException;
timeout - 以毫秒為單位等待的最長時間
此方法使當前執行緒(稱為T )將其放置在該物件的等待集中,然後放棄對該物件的任何和所有同步宣告。 執行緒T變得禁用執行緒排程目的,並且休眠,直到發生四件事情之一:
一些其他執行緒呼叫該物件的notify方法,並且執行緒T恰好被任意選擇為被喚醒的執行緒。
某些其他執行緒呼叫此物件的notifyAll方法。
一些其他執行緒interrupts執行緒T。
指定的實時數量已經過去,或多或少。 然而,如果timeout為零,則不考慮實時,執行緒等待直到通知。
然後從該物件的等待集中刪除執行緒T ,並重新啟用執行緒排程。 然後它以通常的方式與其他執行緒競爭在物件上進行同步的許可權; 一旦獲得了物件的控制,其對物件的所有同步宣告就恢復到現狀 - 也就是在呼叫wait方法之後的情況。 執行緒T然後從呼叫wait方法返回。 因此,從返回wait方法,物件和執行緒的同步狀態T正是因為它是當wait被呼叫的方法。
執行緒也可以喚醒,而不會被通知,中斷或超時,即所謂的虛假喚醒 。 雖然這在實踐中很少會發生,但應用程式必須通過測試應該使執行緒被喚醒的條件來防範,並且如果條件不滿足則繼續等待。
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 >= 500000 || (nanos != 0 && timeout == 0)) { timeout++; } wait(timeout); }
timeout - 以毫秒為單位等待的最長時間。
nanos - 額外的時間,以納秒範圍0-999999。
public final void wait() throws InterruptedException { wait(0); }
10、finalize()方法
protected void finalize() throws Throwable { }
當垃圾收集確定不再有對該物件的引用時,垃圾收集器在物件上呼叫該方法。 一個子類覆蓋了處理系統資源或執行其他清理的finalize方法
finalize方法從不被任何給定物件的Java虛擬機器呼叫多次。
finalize方法丟擲的任何異常都會導致該物件的終止被停止,否則被忽略。