Maison Java javaDidacticiel Analyse approfondie de la classe Object (images et texte)

Analyse approfondie de la classe Object (images et texte)

Mar 02, 2019 pm 02:37 PM
java

Cet article vous apporte une analyse approfondie (images et texte) de la classe Object. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Quelles sont les méthodes de la classe Object

registerNatives() [Implémentation sous-jacente, non étudiée] hashCode()equals(Object obj)clone() toString() notify()notifyAll()wait(long timeout) [il y a deux surcharges] finalize()Object a un total de 11 méthodes, dont l'une est l'implémentation sous-jacente registerNatives(), dont deux sont wait() et méthode surchargée wait(long timeout, int nanos). Il existe également un attribut : return bytecode file object

hashCode

public native int hashCode();

est implémenté par la méthode sous-jacente de native

égal à

public boolean equals(Object obj) {
    return (this == obj);
}
Copier après la connexion

Déterminer directement l'adresse mémoire

Pour que ce soit plus clair ce qu'ils font, lisons ses commentaires :

Analyse approfondie de la classe Object (images et texte)

Analyse approfondie de la classe Object (images et texte)

Selon les commentaires nous pouvons résumer les points suivants :

  • Pour réécrire la méthode equals(), il faut réécrire le hashCode()Le La méthode
  • equals() compare par défaut l'adresse de l'objet, en utilisant l'opérateur d'équivalence ==
  • . La méthode hashCode()
  • améliore les performances des objets dont la couche sous-jacente est une table de hachage. La fonction hashCode()
  • est le même objet (si l'objet n'a pas été modifié) : alors si vous appelez
  • à plusieurs reprises, l'int renvoyé est le même ! La méthode hashCode()
  • est convertie à partir de l'adresse de l'objet par défaut. La méthode equals()
  • a également 5 principes par défaut :
    • equals() Réflexivité ---> L'appel equals() renvoie vrai Peu importe qui appelle
    • sur ces deux objets, il retournera vrai
    • Cohérence ---> Tant que l'objet ne l'a pas été. modifié, tant d'appels renvoient toujours les résultats correspondants !
    • x.equals(y)Transitivité--->y.equals(z) et x.equals(z) renvoient tous deux vrai, alors on peut conclure :
    • renvoie vrai
    • x.equals(y)Symétrie--->y.equals(x) et
    • les résultats doivent être égaux.
    • Le paramètre transmis est nul et la valeur renvoyée est fausse

Pourquoi est-il dit que hashCode() utilise une table de hachage comme couche inférieure pour améliorer les performances ? Facile à comprendre. Revoyons l'insertion de HashMap : Analyse approfondie de la classe Object (images et texte)

Si les valeurs de hachage ne sont pas égales, alors vous pouvez directement déterminer que les clés ne sont pas égales ! La méthode

toString

toString est principalement utilisée pour identifier

l'objet

Analyse approfondie de la classe Object (images et texte)

cloner
  • La méthode clone est utilisée pour cloner des objets. Généralement, l'objet que vous souhaitez cloner est indépendant
  • (séparé de l'objet d'origine)
  • La copie approfondie fait référence à toutes les variables membres. de l'objet (s'il s'agit d'une référence de variable) doit être cloné. Une copie superficielle signifie que les variables membres n'ont pas été clonées
  • Comment cloner un objet ?
    • L'objet cloné doit implémenter l'interface Cloneable
    • remplacer la méthode de clonage
    • , de préférence modifiée en public

wait & notify & notifyAll

les méthodes d'attente et de notification sont en fait des API Java qui nous fournissent la communication entre les threads

.
  • Qu'il s'agisse d'attendre, de notifier ou de notifierAll(), il doit être appelé par l'objet écouteur (objet verrou)
    • En termes simples : Ils sont tous appelés dans des blocs de code synchronisés
    • , sinon une exception sera levée !
  • notify() réveille un fil dans la file d'attente (je ne sais pas lequel sera réveillé), notifyAll() réveille la file d'attente Tous les fils
  • peuvent provoquer le réveil du fil de wait() dans 4 situations
    • Le fil est interrompu
    • wait() moment Quand
    • est réveillé par notify()
    • est réveillé par notifyAll()
  • le fil de discussion appelant wait() libérera le verrou

Pourquoi attendre et notifier sont sur la méthode Objet

  • Parce que notre verrou est un verrou d'objet [Si vous oubliez, vous pouvez consulter : Mécanisme de verrouillage Java pour en savoir plus], chaque objet peut devenir un verrou. Laissez le thread actuel attendre le verrouillage d'un objet. Bien sûr, il doit être opéré via cet objet
  • L'objet de verrouillage est arbitraire, donc ces méthodes. doit être défini dans la classe Object

Thread.sleep()Object.wait()

Les deux peuvent faire une pause le thread actuel et libérez-le du contrôle du processeur.

  • La principale différence est que Object.wait() libère le contrôle du verrouillage de l'objet en même temps que libère le CPU.
  • et
  • ne libèrent pas le verrou Thread.sleep()

Mais il faut noter que :

Après la méthode de notification est appelé, le thread réveillé
n'obtiendra pas immédiatement l'objet verrou . Au lieu de cela, attendez que le bloc de code synchronisé de notify soit exécuté avant que obtienne l'objet de verrouillage
finalize

finalize()` effacera l'objet dans le garbage collector.

a été appelé auparavant, mais cette méthode ne sait pas quand appeler et a incertitudeGénéralement, nous ne la réécrirons pas~

Le finalize() La méthode d'un objet
ne sera appelée qu'une seule fois
, et être appelé finalize() ne signifie pas que gc recyclera immédiatement l'objet, il est donc possible qu'après l'appel de finalize(), l'objet n'ait pas besoin être recyclé, puis quand il est réellement sur le point d'être recyclé. Lors du recyclage, parce qu'il a été appelé une fois auparavant, finalize() ne sera pas appelé, ce qui entraînera des problèmes.

Analyse approfondie de la classe Object (images et texte)

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 de ce site Web
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

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Racine carrée en Java Racine carrée en Java Aug 30, 2024 pm 04:26 PM

Racine carrée en Java

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Nombre parfait en Java

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Générateur de nombres aléatoires en Java

Numéro Armstrong en Java Numéro Armstrong en Java Aug 30, 2024 pm 04:26 PM

Numéro Armstrong en Java

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Weka en Java

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Questions d'entretien chez Java Spring

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Numéro de Smith en Java

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Break or Return of Java 8 Stream Forach?

See all articles