Object 类的常见方法有哪些?

Object类是Java语言中的根类,即所有类的父类。

  1. getClass():返回对象的运行时类对象。这是一个native方法,并且使用了final修饰,意味着它不能被重写。此方法主要用于获取对象的Class对象,进而可以获取类的元数据信息。

  2. hashCode():返回对象的哈希码值。该值主要用于哈希表中,如HashMap,以优化对象查找和存储的效率。hashCode() 方法是 native 方法,其实现依赖于对象的内存地址或其他信息。在覆盖 equals() 方法时,通常也需要覆盖 hashCode() 方法,以保持对象等价性的一致性。

  3. equals(Object obj):比较两个对象是否相等。默认情况下,Object 类的 equals() 方法比较的是对象的内存地址(即是否是同一个对象)。在实际开发中,经常需要根据对象的内容来比较是否相等,因此需要覆盖 equals() 方法。

  4. toString():返回对象的字符串表示。默认情况下,toString() 方法返回对象的类型@对象的哈希码的无符号十六进制表示。为了更友好地表示对象,通常建议覆盖 toString() 方法,返回对象的详细信息。

  5. clone():创建并返回对象的拷贝。这是一个 protected 方法,意味着它只能在类的内部或其子类中被调用。因为 Object 类本身没有实现 Cloneable 接口,所以如果不重写 clone() 方法并在类中实现 Cloneable 接口,调用 clone() 方法会抛出 CloneNotSupportedException。需要注意的是,clone() 方法创建的是对象的浅拷贝。

  6. notify():唤醒在此对象监视器上等待的单个线程。这个方法只能在同步方法或同步块内部被调用。如果有多个线程在等待,它会随机选择一个线程唤醒。

  7. notifyAll():唤醒在此对象监视器上等待的所有线程。与 notify() 方法类似,它也只能在同步方法或同步块内部被调用。

  8. wait(long timeout):使当前线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量。调用此方法会释放对象锁。

  9. wait(long timeout, int nanos):与 wait(long timeout) 类似,但它允许更精确的时间控制,通过 nanos 参数指定额外的等待时间(以纳秒为单位)。

  10. wait():使当前线程无限期等待,直到另一个线程调用此对象的 notify() 方法或 notifyAll() 方法。与带参数的 wait() 方法一样,调用此方法也会释放对象锁。

  11. 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 { }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值