Object
类是Java中所有类的超类,位于java.lang
包中。它提供了一些基本的方法,这些方法在所有Java对象中都可以使用。以下是Object
类中一些常见的方法:
1. toString()
- 用途:返回对象的字符串表示。
- 默认实现:返回对象的类名和哈希码的组合。
- 重写建议:通常需要重写以提供更有意义的字符串表示。
- 示例:
public class MyClass { @Override public String toString() { return "MyClass instance"; } }
2. equals(Object obj)
- 用途:判断两个对象是否相等。
- 默认实现:基于对象的引用进行比较(即
==
)。 - 重写建议:通常需要重写以提供基于内容的比较。
- 示例:
public class MyClass { private int value; @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; MyClass myClass = (MyClass) obj; return value == myClass.value; } }
3. hashCode()
- 用途:返回对象的哈希码。
- 默认实现:基于对象的内存地址计算哈希码。
- 重写建议:如果重写了
equals
方法,通常也需要重写hashCode
方法,以确保相等的对象具有相同的哈希码。 - 示例:
public class MyClass { private int value; @Override public int hashCode() { return Objects.hash(value); } }
4. clone()
- 用途:创建并返回对象的一个副本。
- 默认实现:抛出
CloneNotSupportedException
。 - 重写建议:如果类需要支持克隆,需要实现
Cloneable
接口并重写clone
方法。 - 示例:
public class MyClass implements Cloneable { private int value; @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } }
5. finalize()
- 用途:在对象被垃圾回收之前调用,用于清理资源。
- 默认实现:无操作。
- 重写建议:不推荐使用,建议使用显式的资源管理方式(如
try-with-resources
)。 - 示例:
public class MyClass { @Override protected void finalize() throws Throwable { try { // 清理资源 } finally { super.finalize(); } } }
6. getClass()
- 用途:返回对象的运行时类。
- 示例:
public class MyClass { public void printClass() { System.out.println(this.getClass()); } }
7. notify()
- 用途:唤醒一个等待该对象监视器的单个线程。
- 示例:
public class MyClass { public synchronized void wakeUp() { notify(); } }
8. notifyAll()
- 用途:唤醒所有等待该对象监视器的线程。
- 示例:
public class MyClass { public synchronized void wakeUpAll() { notifyAll(); } }
9. wait()
- 用途:使当前线程等待,直到另一个线程调用该对象的
notify()
或notifyAll()
方法。 - 示例:
public class MyClass { public synchronized void waitHere() throws InterruptedException { wait(); } }
总结
Object
类提供了一些基本的方法,这些方法在所有Java对象中都可以使用。常见的方法包括toString()
、equals(Object obj)
、hashCode()
、clone()
、finalize()
、getClass()
、notify()
、notifyAll()
和wait()
。重写这些方法可以提供更符合具体类需求的功能。