2019-04-25 java.lang.Object

2019-04-25  本文已影响0人  轩判

Object 对象 所有类的基类

java是单根继承语言,Object就是所有类的基类或根类,所有的类都继承自Object

构成

主要由是一个方法构成,其中包含部分 final native的方法

最开始又一个native方法registerNatives native修饰的方法为提供外部实现的方法,方法调用时真正运行的是外部实现,并且通过一个静态初始化块初始化了该方法

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

然后同样是native修饰的getClass方法和hashCode方法

//返回当前运行时对象的Class对象
public final native Class<?> getClass();
//该方法返回对象的哈希码,主要使用在哈希表中,比如JDK中的HashMap。
public native int hashCode();

判断是否是同一个对象 地址比较

//比较两个对象是否相等。Object类的默认实现,即比较2个对象的内存地址是否相等:
public boolean equals(Object obj) {
        return (this == obj);
    }

又是一个native修饰的方法clone

//创建并返回当前对象的一份拷贝
protected native Object clone() throws CloneNotSupportedException;

对象以字符串方式表示 toString方法,默认该方法是反馈类名称@分隔然后加上Object的hashCode值的16进制表示

//Object对象的默认实现,即输出类的名字@实例的哈希码的16进制:
public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

native方法notify和notifyAll和wait

//唤醒一个在此对象监视器上等待的线程(监视器相当于就是锁的概念)。如果所有的线程都在此对象上等待,那么只会选择一个线程。选择是任意性的,并在对实现做出决定时发生。一个线程在对象监视器上等待可以调用wait方法。
public final native void notify();
//跟notify一样,唯一的区别就是会唤醒在此对象监视器上等待的所有线程,而不是一个线程。
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方法

//该方法的作用是实例被垃圾回收器回收的时候触发的操作,就好比 “死前的最后一波挣扎”。
protected void finalize() throws Throwable { }
上一篇下一篇

猜你喜欢

热点阅读