方法预览
protected Object clone(); // 创建并返回对象的一个副本
public boolean equals(Object obj); // 判断其他对象是否与本对象“相等”
protected void finalize(); // GC确定不存在更多此对象引用的时候,GC调用此方法回收
public final native Class<?> getClass(); // 返回此对象运行时的类
public native int hashCode(); // 返回该对象的哈希码值
public final native void notify(); // 唤醒在此对象监视器上等待的单个线程
public final native void notifyAll(); // 唤醒在此对象监视器上等待的所有线程
public public String toString(); // 返回该对象的字符串表示
// 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待
public final native void wait(long timeout) throws InterruptedException
public final void wait(long timeout, int nanos) throws InterruptedException
public final void wait() throws InterruptedException
clone()
Cloneable
由于clone是Object的protected方法,如果不去显示的重写clone,继承类就无法被调用clone方法。同时,如果仅仅显式重写了clone接口未实现Cloneable接口依旧会发生CloneNotSupportedException。
下面是完整重写clone接口
public class CloneTest implements Cloneable{
int a;
@Override
public Object clone throws CloneNotSupportedException{
return super.clone();
}
}
clone的浅拷贝与深拷贝
浅拷贝与深拷贝的不同点在于浅拷贝的拷贝对象与原始类型引用的是同一个对象,而深拷贝的拷贝对象与原始类型引用的不同对象,即对类中的每一个对象进行一次拷贝。主要实现的区别在于对clone函数的重写方法不同。