源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

关于Java Object你真的了解了吗

  • 时间:2022-06-15 06:03 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:关于Java Object你真的了解了吗
导读: 在平时的coding中hashCode()和equals()的使用的场景有哪些?clone深复制怎么实现?wait()和notify()有什么作用?finalize()方法干嘛的?看似coding中使用的不多,不重要,但是有没有跟我一样,想好好的了解一下的。毕竟是基础中的基础。 [b]下面给出一个简单比较全面的概要:[/b] [b]1. hashCode()和equals()[/b] 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()! [b]2. clone() 深复制[/b]
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();

[b]3. wait()和notify()[/b] •只有获得该对象锁之后才能调用,否则抛IllegalMonitorStateException异常 •任何一个时刻,对象的控制权(monitor)只能被一个线程拥有。 [b]线程取得控制权的方法有三:[/b] 1. 执行对象的某个同步实例方法。 2. 执行对象对应类的同步静态方法。 3. 执行对该对象加同步锁的同步块。 执行对该对象加同步锁的示例:
  synchronized (pepoleObject) {
    pepoleObject.notifyAll();
    pepoleObject.wait();
  }

[b]4. finalize()[/b] 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾加收器调用此方法,只能调用一次。当对象被回收时需要配置系统资源或执行其他清除,子类重写finalize方法实现。 以上这篇关于Java Object你真的了解了吗就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部