08
2018
10

java.lang.object

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

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

微信扫码关注

更新实时通知

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。