首先,object 是所有类的父类,所有类默认继承 object 类。
1. clone 方法,是 object 类的 protect 方法。实现了对象的浅拷贝。有两个需要注意,第一点是如果不显式去重写 clone 方法。其他类无法直接调用该类实例的 clone 方法。第二点是,如果不实现 cloneable 接口,则会抛出 clonenotsupportedException 异常。
2. equals 方法,在 object 类中与 == 相同,子类一般需要重写该方法。
3. hashcode 方法,用于 hash 查找,重写了 equals 方法一般也要重写 hashcode 方法。hashcode 返回散列值,equals 返回引用对象值是否相等。值相等的对象,散列值一定相等;散列值相等的对象,值不一定相等。在覆盖 equals 方法中,也需要覆盖 hashcode 方法,保证等价的两个对象,值也相等。
4. getclass 方法,final 方法,获得运行时类型。
5. wait 方法,如果当前线程拥有某个对象,并且释放所持有的对象的 lock。wait 方法会一直等待,直到获得锁 or 被中断。wait(time)设定一个时间间隔,规定时间内没有获得锁就返回。(wait和sleep的区别是,wait释放了锁,sleep仍然持有锁)
调用了该方法后,线程会进入睡眠状态,直到:
1. 其他线程调用了该对象的 notify / notifyall 方法。
2.其他线程调用了 interrupt 打断该线程,抛出一个 InterruptedException 异常。
3. 时间间隔到了。
4. 该线程可以被被调度了。
6. toString 方法,转换成字符串,一般子类都有重写,如果不重写,则打印句柄。
7. finalize();
finalize方法是一个protected方法,Object类的默认实现是不进行任何操作。
该方法的作用是实例被垃圾回收器回收的时候触发的操作,就好比 “死前的最后一波挣扎”。
我们发现Object类中finalize方法被定义成一个空方法。