【面试干货】Object 类中的公共方法详解
- 1、clone() 方法
- 2、equals(Object obj) 方法
- 3、hashCode() 方法
- 4、getClass() 方法
- 5、wait() 方法
- 6、notify() 和 notifyAll() 方法
💖The Begin💖点点关注,收藏不迷路💖 |
在 Java 中,Object 类是所有类的超类(或称为父类)。它包含了一些重要的公共方法,这些方法为所有 Java 对象提供了基础的行为。下面我们将详细探讨这些公共方法。
1、clone() 方法
clone() 方法是 Object 类中的一个保护方法
,用于创建并返回此对象的一个拷贝。 这个拷贝是一个 浅拷贝
,意味着如果对象中的字段是引用类型,那么拷贝的只是引用地址,而不是引用的对象本身。
注意:只有实现了 Cloneable 接口的类才可以调用 clone() 方法,否则会抛出 CloneNotSupportedException 异常。
public class MyClass implements Cloneable { @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); }
} MyClass original = new MyClass();
MyClass cloned = (MyClass) original.clone();
2、equals(Object obj) 方法
equals() 方法在 Object 类中用于比较两个对象是否相等。
在 Object 类中,equals() 方法的默认实现是比较两个对象的引用是否相等,这与 == 操作符的行为是一致的。
但是,在实际开发中,我们经常需要比较对象的内容是否相等,因此子类通常会重写 equals() 方法。
@Override
public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; MyClass other = (MyClass) obj; // 比较对象的字段是否相等 return /* 比较字段的逻辑 */;
}
3、hashCode() 方法
hashCode() 方法返回该对象的哈希码值。
哈希码在哈希表中非常重要,因为哈希表通过哈希码来快速定位对象在表中的位置。当重写 equals() 方法时,通常也需要重写 hashCode() 方法,以确保相等的对象具有相同的哈希码。
@Override
public int hashCode() { // 生成哈希码的逻辑 return /* 哈希码值 */;
}
4、getClass() 方法
getClass() 方法是一个 final 方法,用于返回表示此 Object 运行类(由哪个类创建的实例)的 Class 对象。
Class<?> clazz = obj.getClass();
5、wait() 方法
wait() 方法使当前线程等待该对象的锁,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者等待的时间超过了指定的时间
。当前线程必须是该对象的拥有者,也就是具有该对象的锁。
synchronized (obj) { while (/* 等待条件 */) { obj.wait(); // 等待,直到其他线程调用 notify 或 notifyAll } // 处理等待后的逻辑
}
6、notify() 和 notifyAll() 方法
notify() 方法唤醒在此对象监视器上等待的单个线程(如果有的话)。
notifyAll() 方法唤醒在此对象监视器上等待的所有线程。这两个方法也必须在同步块或同步方法中调用。
synchronized (obj) { // 改变等待条件 obj.notify(); // 唤醒一个等待的线程 // 或 obj.notifyAll(); // 唤醒所有等待的线程
}
💖The End💖点点关注,收藏不迷路💖 |