Maison  >  Article  >  Java  >  Explication détaillée des exemples de code de l'objet Java

Explication détaillée des exemples de code de l'objet Java

黄舟
黄舟original
2017-03-30 10:44:011362parcourir

L'éditeur ci-dessous vous proposera un article sur Java Object Le comprenez-vous vraiment ? L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'œil

Introduction : Quels sont les scénarios d'utilisation de hashCode() et equals() dans le codage quotidien ? Comment implémenter la copie profonde de clonage ? Que font wait() et notify() ? Que fait la méthode finalize() ? Il semble qu'il ne soit pas beaucoup utilisé dans le codage et qu'il ne soit pas important, mais y a-t-il quelqu'un comme moi qui veut en savoir plus ? Après tout, c’est le fondement des fondations.

Ce qui suit est un résumé simple et complet :

1. >

public boolean equals(Object obj) {return (this == obj);}
public native int hashCode();
1. Lorsque la méthode equals() est remplacée, hashCode() sera également remplacée

2. Lorsque equals() renvoie true, le hashcode doit être égal. . Autrement dit : les objets

égaux (identiques) doivent avoir des codes de hachage (ou codes de hachage) égaux

3 Si le hashCode de deux objets est le même, ils ne sont pas nécessairement les mêmes.

4. Lors d'une recherche dans une collection, le hashcode peut réduire considérablement le nombre de

comparaisons d'objets et améliorer l'efficacité de la recherche !

Lors de la détermination des éléments en double, localisez directement la position du bucket via la méthode hashcode(). S'il y a un élément à cette position, appelez la méthode equals() pour déterminer s'ils sont égaux. Au lieu de parcourir chaque élément et de comparer equals() !

2. clone() copie approfondie

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. 🎜>•Ne peut être appelé qu'après avoir obtenu le verrouillage de l'objet, sinon une exception IllegalMonitorStateException sera levée

•À tout moment, le contrôle de l'objet (moniteur) ne peut appartenir à un seul thread.

Il existe trois façons pour un thread de prendre le contrôle : 1. Exécuter une méthode d'instance synchronisée de l'objet.

2. Exécutez la méthode de synchronisation

statique

de la classe correspondante de l'objet. 3. Exécutez le bloc de synchronisation qui ajoute un verrou de synchronisation à l'objet.

Exemple d'exécution d'un verrou de synchronisation sur cet objet :

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

finalize()Quand garbage Cette méthode n'est appelée par le garbage collector de l'objet qu'une seule fois lorsque le collecteur détermine qu'il n'y a plus de

références

à l'objet. Lorsque l'objet est recyclé et doit configurer les ressources système ou effectuer un autre nettoyage, les sous-classes remplacent la méthode finalize pour l'implémenter.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn