【总结】Object类
1.object简介
Java中所有的类都有一个共同的父类Object
共有12个成员方法
2.Object的方法
1.空参构造方法 object()
2.clone()
(1)Object对象有个clone()方法,实现了对象中各个属性的复制
(2)深克隆和浅克隆
浅拷贝:被复制对象的所有值属性都含有与原来对象的相同,而所有的对象引用属性仍然指向原来的对象。
深拷贝:在浅拷贝的基础上,所有引用其他对象的变量也进行了clone,并指向被复制过的新对象。
clone()方法是浅拷贝
(3)clone实现深克隆
如果被复制对象的属性包含其他实体类对象引用,那么这些实体类对象都需要实现cloneable接口并覆盖clone()方法
@Data
public class Person implements Cloneable {
private String name;
private Integer age;
private Address address;
@Override
protected Object clone() throws CloneNotSupportedException {
Object obj=super.clone();
Address a=((Person)obj).getAddress();
((Person)obj).setAddress((Address) a.clone());
return obj;
}
}
3.equals()和hashcode()
- equals():方法体内 return (this == obj) 判断两个对象地址是否一致来判断是否返回true
而大部分情况需要我们根据内容来判断equals是否返回true,这就需要重写equals方法 - hashcode():hashCode()被设计是用来使得哈希容器能高效的工作。有一些哈希容器,比如Hashtable,HashMap等等。判断是否存在,如果用equals一个个比较,效率较低。可以先通过hash得到hash桶的位置,只需要遍历桶内的元素调用equals
4.wait()和wait(timeout)
导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。或超过等待时间
5.notify()或notifyall()
唤醒在此对象监视器上等待的单个/所有线程
6. finalize()
手动调用进行垃圾回收,不一定能实现回收
7.tostring()
打印string,格式可通过重写tostring方法定义
8. Class<? extendsObject> getClass()
返回一个对象的运行时类
class ObjectDemo2{
public static void main(String[] args){
Person p1 = new Person("huahua",20);
Person p2 = new Person("fafa", 20);
Class c1 = p1.getClass();//p1.getClass()拿到的是字节码文件(Person.class)
Class c2 = p2.getClass();
System.out.println(c1 == c2); //true
}
}

浙公网安备 33010602011771号