Object是Java中所有类的父类。以下是Object类的源码解析:
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 >= 500000 || (nanos != 0 && timeout == 0)) {
timeout++;
}
wait(timeout);
}
public final void wait() throws InterruptedException {
wait(0);
}
protected void finalize() throws Throwable { }
}
Object类的源码中包含以下方法:
getClass()
:返回对象的Class对象。hashCode()
:返回对象的哈希码。equals(Object obj)
:比较两个对象是否相等。clone()
:创建并返回当前对象的一份拷贝。toString()
:返回对象的字符串形式。notify()
:唤醒在该对象上等待的一个线程。notifyAll()
:唤醒在该对象上等待的所有线程。wait(long timeout)
:在该对象上等待一段时间,直到另一个线程唤醒该线程。wait(long timeout, int nanos)
:在该对象上等待一段时间和一些纳秒,直到另一个线程唤醒该线程。wait()
:在该对象上等待,直到另一个线程唤醒该线程。finalize()
:对象被垃圾回收器回收时调用。
需要注意的是,Object类的hashCode()
和equals(Object obj)
方法是最常用的方法,在集合框架中也很常用,因为它们用于比较对象的相等性和计算哈希值。因此,在自定义类中需要重写这两个方法来实现对象相等性的比较和哈希码的计算。