Object
类是 Java 中所有类的超类(或称为根类)。这意味着,在 Java 中,任何类(除了 Object
本身和数组类)都隐式地继承自 Object
类。因此,所有的 Java 对象都继承了 Object
类的方法和属性。下面是一些 Object
类中最重要的方法和它们的作用:
1. toString()
作用:返回该对象的字符串表示。
默认实现:通常返回类名 + "@" + 对象的哈希码的无符号十六进制表示(例如,ClassName@15db9742
)。
示例:
java复制代码
public class MyClass { | |
@Override | |
public String toString() { | |
return "MyClass instance with some data"; | |
} | |
} |
2. equals(Object obj)
作用:指示其他某个对象是否与此对象“相等”。
默认实现:比较对象的内存地址(即是否是同一个对象)。
重写建议:通常用于比较对象的内容是否相等。
示例:
java复制代码
public class MyClass { | |
private int id; | |
public MyClass(int id) { | |
this.id = id; | |
} | |
@Override | |
public boolean equals(Object obj) { | |
if (this == obj) return true; | |
if (obj == null || getClass() != obj.getClass()) return false; | |
MyClass myClass = (MyClass) obj; | |
return id == myClass.id; | |
} | |
} |
3. hashCode()
作用:返回该对象的哈希码值。支持将对象有效地存储在哈希表中,例如 HashMap
、HashSet
和 Hashtable
。
默认实现:根据对象的内存地址计算一个哈希码。
重写建议:如果重写了 equals()
方法,通常也需要重写 hashCode()
方法,以确保相等的对象具有相同的哈希码。
示例:
java复制代码
@Override | |
public int hashCode() { | |
return Objects.hash(id); // 或者使用其他自定义方式计算哈希码 | |
} |
4. getClass()
作用:返回此 Object
运行时的类。
示例:
java复制代码
MyClass obj = new MyClass(); | |
Class<?> clazz = obj.getClass(); | |
System.out.println(clazz.getName()); // 输出 "MyClass" |
5. clone()
作用:创建并返回此对象的一个副本。
默认实现:抛出 CloneNotSupportedException
。
重写建议:实现 Cloneable
接口并重写 clone()
方法。
示例:
java复制代码
public class MyClass implements Cloneable { | |
private int id; | |
@Override | |
protected Object clone() throws CloneNotSupportedException { | |
return super.clone(); | |
} | |
} |
6. notify()
作用:唤醒一个在此对象监视器上等待的单个线程。
示例:
java复制代码
synchronized (this) { | |
notify(); | |
} |
7. notifyAll()
作用:唤醒所有在此对象监视器上等待的线程。
示例:
java复制代码
synchronized (this) { | |
notifyAll(); | |
} |
8. wait()
作用:导致当前线程等待,直到其他线程调用此对象的 notify()
或 notifyAll()
方法。
三个重载版本:
wait()
wait(long timeout)
wait(long timeout, int nanos)
示例:
java复制代码
synchronized (this) { | |
wait(); | |
} |
9. finalize()
作用:当垃圾收集器确定不再需要此对象时,垃圾收集器将调用此方法。
注意事项:不推荐使用,因为它不能保证何时被调用,甚至可能不被调用。在 Java 9 中已被弃用,并在后续版本中移除。
示例:
java复制代码
@Override | |
protected void finalize() throws Throwable { | |
try { | |
// 清理代码 | |
} finally { | |
super.finalize(); | |
} | |
} |
总结
toString()
:返回对象的字符串表示。equals(Object obj)
:比较对象是否相等。hashCode()
:返回对象的哈希码。getClass()
:返回对象的运行时类。clone()
:创建对象的副本。notify()
:唤醒一个等待线程。notifyAll()
:唤醒所有等待线程。wait()
:使当前线程等待。finalize()
:垃圾收集时调用(不推荐使用)。
理解这些方法及其作用是编写健壮 Java 代码的基础。