JAvaにおけるObjectクラスソースコード
クラスObjectはクラス階層のルートクラスです.各クラスはObjectをスーパークラス(直接または間接的に継承)として使用します.すべてのオブジェクト(配列を含む)がこのクラスのすべての方法を実現します.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 { }
}