Object是java中所有类的基类。具体结构如下。
1、Object()
默认无参构造函数。
2、registerNatives()
用于注册本地方法
private static native void registerNatives();
static {
registerNatives();
}
3、getClass()
获得类信息
public final native Class<?> getClass();
4、hashCode()
同一个程序两次的hashCode结果不同。
5、equals(Object obj)
两个对象hashCode相等,对象不一定相等。
对象相等,则hashCode一定相等。
public boolean equals(Object obj) {
return (this == obj);
}
有了equals为什么还要有hashCode:
其实,这主要体现在hashCode()方法的作用上,其主要用于增强哈希表的性能。
以集合类中,以Set为例,当新加一个对象时,需要判断现有集合中是否已经存在与此对象相等的对象,如果没有hashCode()方法,需要将Set进行一次遍历,并逐一用equals()方法判断两个对象是否相等,此种算法时间复杂度为o(n)。通过借助于hasCode方法,先计算出即将新加入对象的哈希码,然后根据哈希算法计算出此对象的位置,直接判断此位置上是否已有对象即可。(注:Set的底层用的是Map的原理实现)
为了规范,在重写equals时,也需要对hashCode作出修改。
6、toString()
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
7、notify/notifyAll
唤醒等待该对象的线程,唤醒一个(所有)线程,选择的线程会在上一个线程释放该对象上的锁后得到对象控制权。
8、wait()/wait(long)/wait(long,int)
等待该对象的监视器(monitor),线程进入阻塞。
9、clone()
复制一个对象。两个对象equals返回false,hashCode可能不同。
对象如果想clone,必须继承Cloneable,否则会抛出异常java.lang.CloneNotSupportedException
public class Main implements Cloneable {
public static void main(String[] args) {
// TODO Auto-generated method stub
Main o1 = new Main();
try {
Object o2 = o1.clone();
System.out.println(o1.equals(o2)+" "+o2.hashCode()+" "+o1.hashCode());
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
10、finalize()
protected void finalize() throws Throwable { }
与垃圾回收相关。在对象被回收时,会执行该方法,方法只会执行一次。
原文链接:https://www.qiquanji.com/post/8447.html
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
微信扫码关注
更新实时通知