Java源码阅读 Object

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 { }
}

发布了170 篇原创文章 · 获赞 69 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/qq951127336/article/details/98739555