美文网首页
2019-04-25 java.lang.Object

2019-04-25 java.lang.Object

作者: 轩判 | 来源:发表于2019-04-25 11:16 被阅读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 { }
    

    相关文章

      网友评论

          本文标题:2019-04-25 java.lang.Object

          本文链接:https://www.haomeiwen.com/subject/zzhagqtx.html