拆解Java顶级父类Object

2023/07/17 Java 共 1603 字,约 5 分钟

Object对象是所有类层次结构的根。每个类都有 Object 作为父类。所有对象(包括数组)都实现此类的方法。

正文

public final native Class<?> getClass();

返回此对象的运行时类。返回的 Class 对象是由所表示类的静态同步方法锁定的对象。

public native int hashCode();

返回对象的哈希代码值。支持此方法是为了保护哈希表,例如 java.util.HashMap 提供的哈希表。

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

比较两个对象是否相等。如果是基本类型,则比较数值;如果是对象,则比较内存地址的值是否相等。

protected native Object clone() throws CloneNotSupportedException;

创建并返回此对象的副本。

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

返回对象的字符串表示形式。通常,toString 方法返回一个“文本表示”此对象的字符串。结果应该是一个简洁但信息丰富的表示,易于人们阅读。

建议所有子类重写此方法。

public final native void notify();

唤醒正在此对象的监视器上等待的单个线程。如果有任何线程正在等待此对象,则选择其中一个线程进行唤醒。选择是任意的,由实现自行决定。线程通过调用其中一个等待方法在对象的监视器上等待。

public final native void notifyAll();

唤醒此对象监视器上等待的所有线程

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


//timeout   the maximum time to wait in milliseconds.
//nanos      additional time, in nanoseconds range 0-999999.
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);
}

使当前线程等待,直到另一个线程为此对象调用 notify() 方法或 notifyAll() 方法,或者经过指定的时间量。

如果timeout为零,则不考虑时间,线程一直等待直到调用 notify() 方法或 notifyAll() 方法。

protected void finalize() throws Throwable { }

垃圾回收使用,当一个对象在可达性分析算法中被判定为不可达的对象,也不是“非死不可”,会暂时处于“缓刑”阶段。要真正宣告一个对象死亡,最多会经历两次标记的过程。

如果对象在进行可达性分析后发现没有与GC Roots相连接的引用链,那它将会执行第一次标记,随后进行第二次筛选,筛选的条件是是否有必要执行finalize()方法。如果对象没有覆盖finalize()方法或者finalize()已经被调用过,那么虚拟机会将这两种情况都视为“没有必要执行”(直接被回收)。

文档信息

Search

    Table of Contents