Object类是Java语言中的根类,即所有类的父类。
-
getClass():返回对象的运行时类对象。这是一个native方法,并且使用了final修饰,意味着它不能被重写。此方法主要用于获取对象的Class对象,进而可以获取类的元数据信息。
-
hashCode():返回对象的哈希码值。该值主要用于哈希表中,如HashMap,以优化对象查找和存储的效率。hashCode() 方法是 native 方法,其实现依赖于对象的内存地址或其他信息。在覆盖 equals() 方法时,通常也需要覆盖 hashCode() 方法,以保持对象等价性的一致性。
-
equals(Object obj):比较两个对象是否相等。默认情况下,Object 类的 equals() 方法比较的是对象的内存地址(即是否是同一个对象)。在实际开发中,经常需要根据对象的内容来比较是否相等,因此需要覆盖 equals() 方法。
-
toString():返回对象的字符串表示。默认情况下,toString() 方法返回对象的类型@对象的哈希码的无符号十六进制表示。为了更友好地表示对象,通常建议覆盖 toString() 方法,返回对象的详细信息。
-
clone():创建并返回对象的拷贝。这是一个 protected 方法,意味着它只能在类的内部或其子类中被调用。因为 Object 类本身没有实现 Cloneable 接口,所以如果不重写 clone() 方法并在类中实现 Cloneable 接口,调用 clone() 方法会抛出 CloneNotSupportedException。需要注意的是,clone() 方法创建的是对象的浅拷贝。
-
notify():唤醒在此对象监视器上等待的单个线程。这个方法只能在同步方法或同步块内部被调用。如果有多个线程在等待,它会随机选择一个线程唤醒。
-
notifyAll():唤醒在此对象监视器上等待的所有线程。与 notify() 方法类似,它也只能在同步方法或同步块内部被调用。
-
wait(long timeout):使当前线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量。调用此方法会释放对象锁。
-
wait(long timeout, int nanos):与 wait(long timeout) 类似,但它允许更精确的时间控制,通过 nanos 参数指定额外的等待时间(以纳秒为单位)。
-
wait():使当前线程无限期等待,直到另一个线程调用此对象的 notify() 方法或 notifyAll() 方法。与带参数的 wait() 方法一样,调用此方法也会释放对象锁。
-
finalize():当垃圾回收器决定回收某对象时,如果该对象覆盖了 finalize() 方法,则垃圾回收器会先调用此方法。但需要注意的是,finalize() 方法的执行时间是不确定的,而且不保证一定会被执行(因为垃圾回收是不确定的)。因此,不建议在 finalize() 方法中放置重要的清理代码。
/**
* native 方法,用于返回当前运行时对象的 Class 对象,使用了 final 关键字修饰,故不允许子类重写。
*/
public final native Class<?> getClass()
/**
* native 方法,用于返回对象的哈希码,主要使用在哈希表中,比如 JDK 中的HashMap。
*/
public native int hashCode()
/**
* 用于比较 2 个对象的内存地址是否相等,String 类对该方法进行了重写以用于比较字符串的值是否相等。
*/
public boolean equals(Object obj)
/**
* native 方法,用于创建并返回当前对象的一份拷贝。
*/
protected native Object clone() throws CloneNotSupportedException
/**
* 返回类的名字实例的哈希码的 16 进制的字符串。建议 Object 所有的子类都重写这个方法。
*/
public String toString()
/**
* native 方法,并且不能重写。唤醒一个在此对象监视器上等待的线程(监视器相当于就是锁的概念)。如果有多个线程在等待只会任意唤醒一个。
*/
public final native void notify()
/**
* native 方法,并且不能重写。跟 notify 一样,唯一的区别就是会唤醒在此对象监视器上等待的所有线程,而不是一个线程。
*/
public final native void notifyAll()
/**
* native方法,并且不能重写。暂停线程的执行。注意:sleep 方法没有释放锁,而 wait 方法释放了锁 ,timeout 是等待时间。
*/
public final native void wait(long timeout) throws InterruptedException
/**
* 多了 nanos 参数,这个参数表示额外时间(以纳秒为单位,范围是 0-999999)。 所以超时的时间还需要加上 nanos 纳秒。。
*/
public final void wait(long timeout, int nanos) throws InterruptedException
/**
* 跟之前的2个wait方法一样,只不过该方法一直等待,没有超时时间这个概念
*/
public final void wait() throws InterruptedException
/**
* 实例被垃圾回收器回收的时候触发的操作
*/
protected void finalize() throws Throwable { }