在Java中,Object
类是所有类的直接或间接父类。这意味着每个类至少继承了Object
类的方法,即使没有显式地声明继承关系。以下是Object
类中定义的一些重要方法及其作用:
public boolean equals(Object obj)
:- 用于比较两个对象是否相等。默认实现是比较两个对象的引用(即内存地址),但通常建议重写此方法以基于对象的内容进行比较。
public String toString()
:- 返回该对象的字符串表示形式。默认情况下,它返回一个包含对象类名和哈希码的字符串,但经常被重写以便提供更有意义的对象描述。
protected void finalize() throws Throwable
:- 在垃圾收集器确定不再有对该对象的引用并准备回收其占用的内存之前,会调用此方法。不过,这种方法的使用已被认为是过时的做法,并不推荐依赖它来进行资源清理工作。
public final Class<?> getClass()
:- 返回运行时类的一个实例,通过这个实例可以获得关于类的各种信息,如类名、父类、实现的接口等。
public int hashCode()
:- 返回对象的哈希码值。对于同一对象,多次调用
hashCode()
应该返回相同的结果。如果两个对象根据equals()
方法被认为是相等的,那么它们的哈希码也应该相同。
- 返回对象的哈希码值。对于同一对象,多次调用
protected Object clone() throws CloneNotSupportedException
:- 创建并返回此对象的一个副本。注意,要使一个类支持克隆,它必须实现
Cloneable
接口,否则将抛出CloneNotSupportedException
异常。
- 创建并返回此对象的一个副本。注意,要使一个类支持克隆,它必须实现
public final native void notify()
:- 唤醒在此对象监视器上等待的单个线程。如果有多个线程在等待,则会选择其中一个线程唤醒。具体哪个线程会被选中是不可预测的。
public final native void notifyAll()
:- 唤醒在此对象监视器上等待的所有线程。
public final native void wait(long timeout) throws InterruptedException
:- 导致当前线程等待直到另一个线程调用
notify()
或notifyAll()
方法,或者超过指定的超时时间。还有两个重载版本:一个是接受额外的纳秒参数来提高精度,另一个是没有参数的版本,会让线程无限期等待直到通知。
- 导致当前线程等待直到另一个线程调用
这些方法构成了Java面向对象编程的基础,并且在大多数自定义类中都会直接或间接地使用到。理解它们的作用以及何时需要重写它们对于编写高效、正确的Java代码至关重要。
THE END