Object 是Java类层次结构的根类。所有非基本类型(包括数组)都直接或间接继承自该类。
重要函数
registerNatives()
将几个函数本地化,方便c++中调用
static JNINativeMethod methods[] = {
{"hashCode", "()I", (void *)&JVM_IHashCode},
{"wait", "(J)V", (void *)&JVM_MonitorWait},
{"notify", "()V", (void *)&JVM_MonitorNotify},
{"notifyAll", "()V", (void *)&JVM_MonitorNotifyAll},
{"clone", "()Ljava/lang/Object;", (void *)&JVM_Clone},
};
JNIEXPORT void JNICALL
Java_java_lang_Object_registerNatives(JNIEnv *env, jclass cls)
{
(*env)->RegisterNatives(env, cls,
methods, sizeof(methods)/sizeof(methods[0]));
}
getClass()
返回表示此对象的类的唯一类实例
equals()
判断是否相等,默认是比较引用是否相同
hashCode()
返回此对象的整数哈希码。
clone()
创建复制一个该对象
notify()
使正在等待(通过调用wait()方法之一导致的)该对象监视器的线程被唤醒。
notifyAll()
使正在等待(通过调用wait()方法之一导致的)该对象监视器的所有线程被唤醒。
wait()
使调用线程等待,直到另一个线程调用此对象的notify()或notifyAll()方法。
wait(long timeoutMillis)
调用线程等待,直到另一个线程调用此对象的notify()或notifyAll()方法,或直到指定的超时过期。
wait(long timeoutMillis, int nanos)
调用线程等待,直到另一个线程调用此对象的notify()或notifyAll()方法,或直到指定的超时过期。
finalize()
回收该实例
源码及注释笔记
public class Object {
//
private static native void registerNatives();
static {
registerNatives();
}
//Object构造函数
@HotSpotIntrinsicCandidate
public Object() {}
//返回表示此对象的类的唯一类实例
@HotSpotIntrinsicCandidate
public final native Class<?> getClass();
//返回此对象的整数哈希码。
@HotSpotIntrinsicCandidate
public native int hashCode();
//equals函数默认是判断是否引用相同
public boolean equals(Object obj) {
return (this == obj);
}
//创建复制一个该对象
@HotSpotIntrinsicCandidate
protected native Object clone() throws CloneNotSupportedException;
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
//使正在等待(通过调用wait()方法之一导致的)该对象监视器的线程被唤醒。
@HotSpotIntrinsicCandidate
public final native void notify();
//使正在等待(通过调用wait()方法之一导致的)该对象监视器的所有线程被唤醒。
@HotSpotIntrinsicCandidate
public final native void notifyAll();
//使调用线程等待,直到另一个线程调用此对象的notify()或notifyAll()方法。
public final void wait() throws InterruptedException {
wait(0L);
}
//调用线程等待,直到另一个线程调用此对象的notify()或notifyAll()方法,或直到指定的超时过期。
public final native void wait(long timeoutMillis) throws InterruptedException;
//调用线程等待,直到另一个线程调用此对象的notify()或notifyAll()方法,或直到指定的超时过期。
public final void wait(long timeoutMillis, int nanos) throws InterruptedException {
if (timeoutMillis < 0) {
throw new IllegalArgumentException("timeoutMillis value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
if (nanos > 0 && timeoutMillis < Long.MAX_VALUE) {
timeoutMillis++;
}
wait(timeoutMillis);
}
@Deprecated(since="9")
protected void finalize() throws Throwable { }
}