1. 程式人生 > >java Object中的基本方法

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

表示感謝!!!