Object 對象 所有類的基類
java是單根繼承語言,Object就是所有類的基類或根類,所有的類都繼承自Object
構成
主要由是一個方法構成,其中包含部分 final native的方法
最開始又一個native方法registerNatives native修飾的方法為提供外部實現(xiàn)的方法,方法調用時真正運行的是外部實現(xiàn),并且通過一個靜態(tài)初始化塊初始化了該方法
private static native void registerNatives();
static {
registerNatives();
}
然后同樣是native修飾的getClass方法和hashCode方法
//返回當前運行時對象的Class對象
public final native Class<?> getClass();
//該方法返回對象的哈希碼,主要使用在哈希表中,比如JDK中的HashMap。
public native int hashCode();
判斷是否是同一個對象 地址比較
//比較兩個對象是否相等。Object類的默認實現(xiàn),即比較2個對象的內存地址是否相等:
public boolean equals(Object obj) {
return (this == obj);
}
又是一個native修飾的方法clone
//創(chuàng)建并返回當前對象的一份拷貝
protected native Object clone() throws CloneNotSupportedException;
對象以字符串方式表示 toString方法,默認該方法是反饋類名稱@分隔然后加上Object的hashCode值的16進制表示
//Object對象的默認實現(xiàn),即輸出類的名字@實例的哈希碼的16進制:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
native方法notify和notifyAll和wait
//喚醒一個在此對象監(jiān)視器上等待的線程(監(jiān)視器相當于就是鎖的概念)。如果所有的線程都在此對象上等待,那么只會選擇一個線程。選擇是任意性的,并在對實現(xiàn)做出決定時發(fā)生。一個線程在對象監(jiān)視器上等待可以調用wait方法。
public final native void notify();
//跟notify一樣,唯一的區(qū)別就是會喚醒在此對象監(jiān)視器上等待的所有線程,而不是一個線程。
public final native void notifyAll();
//wait方法會讓當前線程等待直到另外一個線程調用對象的notify或notifyAll方法,或者超過參數設置的timeout超時時間。
public final native void wait(long timeout) throws InterruptedException;
然后是兩個public方法wait
//跟wait(long timeout)方法類似,多了一個nanos參數,這個參數表示額外時間(以毫微秒為單位,范圍是 0-999999)。 所以超時的時間還需要加上nanos毫秒。
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);
}
//跟wait(long timeout)方法類似
public final void wait() throws InterruptedException {
wait(0);
}
一個protected的finalize方法
//該方法的作用是實例被垃圾回收器回收的時候觸發(fā)的操作,就好比 “死前的最后一波掙扎”。
protected void finalize() throws Throwable { }