• 技术文章 >Java >java教程

    关于Java Object的代码实例详解

    黄舟黄舟2017-03-30 10:44:01原创616
    下面小编就为大家带来一篇关于Java Object你真的了解了吗。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    导读: 在平时的coding中hashCode()和equals()的使用的场景有哪些?clone深复制怎么实现?wait()和notify()有什么作用?finalize()方法干嘛的?看似coding中使用的不多,不重要,但是有没有跟我一样,想好好的了解一下的。毕竟是基础中的基础。

    下面给出一个简单比较全面的概要:

    1. hashCode()和equals()

    public boolean equals(Object obj) {return (this == obj);}
    public native int hashCode();

    1.当equals()方法被override时,hashCode()也要被override.

    2.当equals()返回true,hashcode一定相等。即:相等(相同)的对象必须具有相等的哈希码(或者散列码)

    3.如果两个对象的hashCode相同,它们并不一定相同。

    4.在集合查找时,hashcode能大大降低对象比较次数,提高查找效率!

    在判断重复元素时,直接通过hashcode()方法,定位到桶位置,如果该位置有元素,再调用equals()方法判断是否相等。而不是遍历每一个元素比较equals()!

    2. clone() 深复制

    public class Animal implements Cloneable {
      private int height;
      private int age;
    
      public Animal(int height, int age){
        this.height = height;
        this.age = age;
      }
    
      @Override
      public Object clone() throws CloneNotSupportedException {
        return super.clone();
      }
    }
    
    
    public class People implements Cloneable {
      private int height;
      private int age;
      private Animal a;
    
      public People(int height, int age,Animal a){
        this.height = height;
        this.age = age;
        this.a = a;
      }
    
      @Override
      public Object clone() throws CloneNotSupportedException {
        People p = (People) super.clone();
        p.a = (Animal) a.clone();
        return p;
      }
    
    }
    
    Animal a1 = new Animal(100,3);
    People p1 = new People(173,24,a1);
    //深复制
    People p2 = (People) p1.clone();

    3. wait()和notify()

    •只有获得该对象锁之后才能调用,否则抛IllegalMonitorStateException异常

    •任何一个时刻,对象的控制权(monitor)只能被一个线程拥有。

    线程取得控制权的方法有三:

    1. 执行对象的某个同步实例方法。

    2. 执行对象对应类的同步静态方法。

    3. 执行对该对象加同步锁的同步块。

    执行对该对象加同步锁的示例:

      synchronized (pepoleObject) {
        pepoleObject.notifyAll();
        pepoleObject.wait();
      }

    4. finalize()

    当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾加收器调用此方法,只能调用一次。当对象被回收时需要配置系统资源或执行其他清除,子类重写finalize方法实现。

    以上就是关于Java Object的代码实例详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:java object
    上一篇:Java虚拟机管理的内存运行时数据区域的详细介绍 下一篇:详解Java细粒度锁实现的3种方式的示例代码
    PHP编程就业班

    相关文章推荐

    • 一起聊聊Java常用数据类型的输入输出• 归纳整理Java并发知识点• 详细解析Java反射机制原理和几种Class获取方式• 图文详解Java数据结构与算法• 图文详解!什么是Java内存模型

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网