java Object中的基本方法
在java object預設的基本方法中,主要包含如下方法:
getClass(), hashCode(), equals(), clone(), toString(), notify(), notifyAll(), wait(), finalize()
基本方法含義:
(1)getClass():返回此 Object 的執行時類。
(2)hashCode 的常規協定是:
a.在 Java 應用程式執行期間,在對同一物件多次呼叫 hashCode 方法時,必須一致地返回相同的整數,前提是將物件進行 equals 比較時所用的資訊沒有被修改。從某一應用程式的一次執行到同一應用程式的另一次執行,該整數無需保持一致。
b.如果根據 equals(Object) 方法,兩個物件是相等的,那麼對這兩個物件中的每個物件呼叫 hashCode 方法都必須生成相同的整數結果。
c.如果根據 equals(java.lang.Object) 方法,兩個物件不相等,那麼對這兩個物件中的任一物件上呼叫 hashCode 方法不 要求一定生成不同的整數結果。但是,程式設計師應該意識到,為不相等的物件生成不同整數結果可以提高雜湊表的效能。
(3)equals():某個其他物件是否與此物件“相等”。
(4)clone():本地CLONE方法,用於物件的複製。
(5)toString():返回該物件的字串表示。
(6)notify():喚醒在此物件監視器上等待的單個執行緒。
(7)notifyAll():喚醒在此物件監視器上等待的所有執行緒。
(8)wait():使當前的執行緒等待,直到其他執行緒呼叫此物件的 notify() 方法或 notifyAll() 方法。
(9)finalize():當垃圾回收器確定不存在對該物件的更多引用時,由物件的垃圾回收器呼叫此方法。
java Object類原始檔及方法說明:
package java.lang; public class Object { /* 一個本地方法,具體是用C(C++)在DLL中實現的,然後通過JNI呼叫。*/ private static native void registerNatives(); /* 物件初始化時自動呼叫此方法*/ static { registerNatives(); } /* 返回此 Object 的執行時類。*/ public final native Class<?> getClass(); /* hashCode 的常規協定是: 1.在 Java 應用程式執行期間,在對同一物件多次呼叫 hashCode 方法時,必須一致地返回相同的整數,前提是將物件進行 equals 比較時所用的資訊沒有被修改。從某一應用程式的一次執行到同一應用程式的另一次執行,該整數無需保持一致。 2.如果根據 equals(Object) 方法,兩個物件是相等的,那麼對這兩個物件中的每個物件呼叫 hashCode 方法都必須生成相同的整數結果。 3.如果根據 equals(java.lang.Object) 方法,兩個物件不相等,那麼對這兩個物件中的任一物件上呼叫 hashCode 方法不 要求一定生成不同的整數結果。但是,程式設計師應該意識到,為不相等的物件生成不同整數結果可以提高雜湊表的效能。 */ public native int hashCode(); public boolean equals(Object obj) { return (this == obj); } /*本地CLONE方法,用於物件的複製。*/ protected native Object clone() throws CloneNotSupportedException; /*返回該物件的字串表示。非常重要的方法*/ public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } /*喚醒在此物件監視器上等待的單個執行緒。*/ public final native void notify(); /*喚醒在此物件監視器上等待的所有執行緒。*/ public final native void notifyAll(); /*在其他執行緒呼叫此物件的 notify() 方法或 notifyAll() 方法前,導致當前執行緒等待。換句話說,此方法的行為就好像它僅執行 wait(0) 呼叫一樣。 當前執行緒必須擁有此物件監視器。該執行緒釋出對此監視器的所有權並等待,直到其他執行緒通過呼叫 notify 方法,或 notifyAll 方法通知在此物件的監視器上等待的執行緒醒來。然後該執行緒將等到重新獲得對監視器的所有權後才能繼續執行。*/ public final void wait() throws InterruptedException { wait(0); } /*在其他執行緒呼叫此物件的 notify() 方法或 notifyAll() 方法,或者超過指定的時間量前,導致當前執行緒等待。*/ public final native void wait(long timeout) throws InterruptedException; /* 在其他執行緒呼叫此物件的 notify() 方法或 notifyAll() 方法,或者其他某個執行緒中斷當前執行緒,或者已超過某個實際時間量前,導致當前執行緒等待。*/ 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); } /*當垃圾回收器確定不存在對該物件的更多引用時,由物件的垃圾回收器呼叫此方法。*/ protected void finalize() throws Throwable { } }
參考:
https://www.cnblogs.com/langtianya/archive/2013/01/31/2886572.html
表示感謝!!!