JDK8(一)Object

源码版本:JDK8

java.lang.Object

注释

/*
 * Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.lang;

这段就不用说了,只提一次,Oracle的版权,进入正文

/**
 * 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.
 *
 * @author  unascribed
 * @see     java.lang.Class
 * @since   JDK1.0
 */

Object类是所有类的父类,就像祖师爷,所有的对象包括数组都实现这个类的方法,也因为所有类都默认继承Object,所以省略了extends Object关键字

registerNatives()

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

主要作用是将C/C++中的方法映射到Java中的native方法,实现方法命名的解耦。函数的执行是在静态代码块中执行的,在类首次进行加载的时候执行。

getClass()

public final native Class<?> getClass();

返回此Object的运行时类。返回的类对象是被表示类的static synchronized方法锁定的对象。

实际结果的类型是Class<? extends |X|>其中|X|是静态类型上其表达的擦除getClass被调用。

例如,在此代码片段中不需要转换:

Number n = 0;
Class<? extends Number> c = n.getClass();

结果
表示类对象的运行时类的Class对象。

hashCode()

public native int hashCode();

返回对象的哈希码值。

支持这种方法是为了散列表,如HashMap提供的那样。

hashCode的总合同是:

只要在执行Java应用程序时多次在同一个对象上调用该方法,hashCode方法必须始终返回相同的整数,前提是修改了对象中equals比较中的信息。

该整数不需要从一个应用程序的执行到相同应用程序的另一个执行保持一致。

如果根据equals(Object)方法两个对象相等,则在两个对象中的每个对象上调用hashCode方法必须产生相同的整数结果。

不要求如果两个对象根据equals(java.lang.Object)方法不相等,那么在两个对象中的每个对象上调用hashCode方法必须产生不同的整数结果。

但是,程序员应该意识到,为不等对象生成不同的整数结果可能会提高哈希表的性能。
尽可能多的合理实用,由类别Object定义的hashCode方法确实为不同对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但Java的编程语言不需要此实现技术。)

equals(Object obj)

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

clone()

protected native Object clone() throws CloneNotSupportedException;

toString()

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

notify()

public final native void notify();

notifyAll()

public final native void notifyAll();

wait(long timeout)

public final native void wait(long timeout) throws InterruptedException;

wait(long timeout, int 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()

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

finalize()

protected void finalize() throws Throwable { }
posted @ 2021-01-28 15:23  Fengx、  阅读(158)  评论(0编辑  收藏  举报