1. 程式人生 > >關於Java基類Object

關於Java基類Object

 java.lang.Object,Object是Java所有類的祖先類(父類)

1.首先看object原始碼 JDK1.7(oracle)
public class Object { //本地方法,C/C++在DLL中實現,通過JNI呼叫 private static native void registerNatives(); //類初始化呼叫此方法 static { registerNatives(); } //返回此Object的執行時類(每個類的Class類物件)
public final native Class<?> getClass(); //獲得該物件的hash值 public native int hashCode(); //對比兩物件的記憶體地址,如果不重寫,equals方法比較的是物件地址 public boolean equals(Object obj) { return (this == obj); } //本地clone方法,用於物件的賦值 protected
native Object clone() throws CloneNotSupportedException;
//返回物件的的字串表示,預設是:類名[email protected]+hash值 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode());
//notify()/notifyAll()/wait()以及wait兩個過載方法都是執行緒同步相關方法 public
final native void notify();
public final native void notifyAll(); public final native void wait(long timeout) throws 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 >= 500000 || (nanos != 0 && timeout == 0)) { timeout++; } wait(timeout); } public final void wait() throws InterruptedException { wait(0); }
//物件被回收時呼叫,不管如何,一個物件只調用一次 protected void finalize() throws Throwable { }


可見object中擁有native,hashCode,euqals,clone,toString,wait,notify,notifyAll,finalize這幾個方法,其中常用的方法有
equals,toString,以及執行緒中常常呼叫的wait,notify,notyfiAll方法。
另外:

原始碼中並沒有Object的構造方法,但是,同樣的,編譯器在編譯期間會給Object(事實上,所有的Java類,只要類中沒有

構造方法,編譯器都會預設的給一個空構造方法,若已有構造方法,則不會新增)一個預設的空的構造方法

public Object(){}

帶有native修飾的都是本地方法,所謂的本地方法是不通過Java語言實現的方法,但可以通過JNI,像呼叫Java方法一樣呼叫
這些方法。詳細的可以搜尋檢視JNI。 這個方法的作用是對Object以下幾個本地方法(hashCode/clone/notify等)進行註冊
(可以理解為,這個方法是告訴JVM這幾個本地方法的實現對映),每一個有本地方法的都會有這個方法,但其內容不一樣
(因為註冊的方法不一樣嘛)。