Object 类的常见方法?

Object 类是所有类的父类,因此所有类都可以调用它的方法。它提供了以下 11 个方法,可以分为六类:

对象比较

  • public native int hashCode(): 这是一个本地方法,用于返回对象的哈希码。主要在哈希表中使用,比如 Java 中的 HashMap。
  • public boolean equals(Object obj): 用于比较两个对象的内存地址是否相等。String 类重写了该方法,用于比较字符串的值是否相等。

对象拷贝

  • protected native Object clone() throws CloneNotSupportedException: 这是一个本地方法,用于创建并返回当前对象的副本。通常情况下,对于任何对象 x,表达式 x.clone() != x 为 true,x.clone().getClass() == x.getClass() 为 true。Object 本身没有实现 Cloneable 接口,因此如果没有重写 clone 方法并进行调用,会抛出 CloneNotSupportedException 异常。

对象转字符串

  • public String toString(): 返回类的名字@实例的哈希码的 16 进制字符串表示。建议 Object 的所有子类都重写该方法。

多线程调度

  • public final native void notify(): 这是一个本地方法,并且不能被重写。用于唤醒在此对象监视器上等待的线程。如果有多个线程在等待,只会随机选择一个线程进行唤醒。
  • public final native void notifyAll(): 这是一个本地方法,并且不能被重写。与 notify 方法类似,唯一的区别是会唤醒在此对象监视器上等待的所有线程,而不仅仅是一个线程。
  • public final native void wait(long timeout) throws InterruptedException: 这是一个本地方法,并且不能被重写。暂停当前线程的执行。需要注意的是,sleep 方法并不会释放锁,而 wait 方法会释放锁。timeout 参数表示等待的时间。
  • public final void wait(long timeout, int nanos) throws InterruptedException: 与上一个 wait 方法相似,但额外添加了 nanos 参数,表示等待的附加纳秒数(范围为 0-999999)。因此,超时时间还需要加上 nanos 毫秒。
  • public final void wait() throws InterruptedException: 类似于前面两个 wait 方法,区别在于该方法一直等待,没有超时的概念。

反射

  • public final native Class<?> getClass(): 这是一个本地方法,用于返回当前运行时对象的 Class 对象。由于使用了 final 关键字修饰,因此不允许子类重写该方法。

垃圾回收

  • protected void finalize() throws Throwable: 通知垃圾收集器回收对象。

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题