Object是JDK最基础的类,它是所有类的超类,现在让我们来分析一下它。
registerNatives()
/**
* 对象初始化的时候,自动调用这个类
*/
private static native void registerNatives();
static {
registerNatives();
}
getClass()
/**
* 这个方法被final修饰,不能被子类重写,返回的是这个对象运行的类
*/
public final native Class<?> getClass();
hashCode()
/**
* 主要用来判断两个对象是否相等
* 1:如果两个对象相等,那么它们的hashcode一定相等
* 2:hashcode相等的,这两个对象不一定相等
* 3:hashcode不相等,那么这两个对象一定相等
*/
public native int hashCode();
equals(Object obj)
/**
* 判断两个对象是否相等
* 主要比较的是内存地址,如果我们要比较两个对象里面的内容是否相等,那么我们就会重写这个方法。注意:重写 equals()方法的时候,也一定要重写hashcode()方法。
* 因为java规定:两个对象相等,那么它们的hashcode也一定要相等。
*/
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()
/**
* final修饰,不能被重写,唤醒一个正在等待对象锁的线程,该方法只能用于同步方法。
*/
public final native void notify();
notifyAll()
/**
* final修饰,不能被重写,唤醒所有正在等待对象锁的线程,该方法只能用于同步方法。
*/
public final native void notifyAll();
wait()
/**
* 在其他线程调用此对象的notify()方法或notifyAll()方法前,导致当前线程等待。换句话说,此方法的行为就好像它仅执行 wait(0)调用一样。
* 当前线程必须拥有此对象监视器。
* 该线程发布对此监视器的所有权并等待,直到其他线程通过调用notify方法或notifyAll方法通知在此对象的监视器上等待的* 线程醒来,
* 然后该线程将等到重新获得对监视器的所有权后才能继续执行。
*/
public final void wait() throws InterruptedException {
wait(0);
}
finalize()
/**
* 用于对象被回收的时候这个由JVM支持,Object的finalize方法默认是什么都没有做,如果子类需要在对象被回收时执行一些逻辑处理,则可以重写finalize方法。
*/
protected void finalize() throws Throwable {
}
总结
Object类是最基础的类,但是分析它也是不容易的事情,JDK源码博大精深,要坚持。