Java源码分析:Object类源代码分析

时间:2019-01-19
本文章向大家介绍Java源码分析:Object类源代码分析,主要包括Java源码分析:Object类源代码分析使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Object类源代码分析:


package java.lang;

/**
 * Class {@code Object} is the root of the class hierarchy.
 * Every class has {@code Object} as a superclass. All objects,
 * including arrays, implement the methods of this class.
 */
public class Object {

    private static native void registerNatives();
    static {
        registerNatives();
    }

    
    public final native Class<?> getClass();

    
    public native int hashCode();

   
    public boolean equals(Object obj) {
        return (this == obj);
    }

    
    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();

    
    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 > 0) {
            timeout++;
        }

        wait(timeout);
    }

    
    public final void wait() throws InterruptedException {
        wait(0);
    }

    
    protected void finalize() throws Throwable { }
}

1.native这个关键字:Native Method就是一个java调用了非java代码的接口,具体实现体是非java实现(但是有实现),不能与abstract连用。
2.equals:底层未直接用双等号判断是否是同一个对象。
3.clone():本地方法,用于对象的复制
4.hashCode 的常规协定是:  
    1.在 Java 应用程序执行期间,在对同一对象多次调用 hashCode方法时,必须一致地返回相同的整数,前提是将对象进行equals比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。   
    2.如果根据equals(Object)方法,两个对象是相等的,那么对这两个对象中的每个对象调用hashCode方法都必须生成相同的整数结果。   
    3.如果根据equals(java.lang.Object)方法,两个对象不相等,那么对这两个对象中的任一对象上调用hashCode 方法不要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。
5.toString():    getClass().getName() + "@" + Integer.toHexString(hashCode());未覆toString方法时返回的字符串。
6.与线程有关的三个本地方法:
notify():在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待
notifyAll()
wait(long timeout)
7.finalize() :当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。