Heim  >  Artikel  >  Java  >  Eingehende Analyse der Object-Klasse (Bilder und Text)

Eingehende Analyse der Object-Klasse (Bilder und Text)

不言
不言nach vorne
2019-03-02 14:37:212689Durchsuche

Der Inhalt dieses Artikels ist eine ausführliche Analyse (Bilder und Text) der Objektklasse. Ich hoffe, dass er für Sie hilfreich ist.

Welche Methoden gibt es in der Object-Klasse?

registerNatives() [Zugrunde liegende Implementierung, nicht untersucht] hashCode()equals(Object obj)clone() toString() notify()notifyAll()wait(long timeout) [es gibt zwei Überladungen] finalize()Object verfügt über insgesamt 11 Methoden, eine davon ist die zugrunde liegende Implementierung registerNatives(), zwei davon sind wait() und wait(long timeout, int nanos) überladene Methode. Es gibt auch ein Attribut: Bytecode-Dateiobjekt zurückgeben

hashCode

public native int hashCode();

wird durch die zugrunde liegende Methode von native implementiert

gleich

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

Speicheradresse direkt bestimmen

Um klarer zu machen, was sie tun, lesen wir die Kommentare:

Eingehende Analyse der Object-Klasse (Bilder und Text)

Eingehende Analyse der Object-Klasse (Bilder und Text)

Den Kommentaren zufolge können wir die folgenden Punkte zusammenfassen:

  • Um die equals()-Methode neu zu schreiben, müssen Sie die hashCode()Die Methode
  • vergleicht standardmäßig die Adresse des Objekts mit dem Äquivalenzoperator equals()==
  • . Die Funktion
  • hashCode()
  • hat die Funktion, die Leistung für Objekte zu verbessern, deren zugrunde liegende Ebene ein Hash ist Tabelle.
  • hashCode()Das gleiche Objekt (wenn das Objekt nicht geändert wurde): Wenn Sie dann
  • wiederholt aufrufen, ist der zurückgegebene int derselbe! Die
  • hashCode()
  • -Methode wird standardmäßig aus der Adresse des Objekts konvertiert. Die
  • equals()
  • -Methode verfügt außerdem über 5 Standardprinzipien:
    • equals() Reflexivität ---> Der Aufruf von equals() gibt true zurück, egal wer
    • für diese beiden Objekte aufruft, es wird true zurückgegeben
    • Konsistenz ---> Solange das Objekt nicht vorhanden ist geändert, sodass viele Aufrufe immer noch die entsprechenden Ergebnisse zurückgeben!
    • x.equals(y)Transitivität--->y.equals(z) und x.equals(z) geben beide wahr zurück, dann kann geschlossen werden:
    • gibt wahr zurück
    • x.equals(y)Symmetrie--->y.equals(x) und
    • Die Ergebnisse sollten gleich sein.
    • Der übergebene Parameter ist null und der zurückgegebene Wert ist falsch

Warum heißt es, dass hashCode() eine Hash-Tabelle als unterste Ebene verwendet? um die Leistung zu verbessern? Leicht zu verstehen. Sehen wir uns die Einfügung von HashMap an: Eingehende Analyse der Object-Klasse (Bilder und Text)

Wenn die Hash-Werte nicht gleich sind, können Sie direkt feststellen, dass die Schlüssel nicht gleich sind! Die

toString

toString-Methode wird hauptsächlich verwendet, um den

Eingehende Analyse der Object-Klasse (Bilder und Text)

Klon

zu identifizieren
  • >Die Klonmethode wird zum Klonen von Objekten verwendet. Im Allgemeinen ist das Objekt, das Sie klonen möchten, unabhängig
  • (getrennt vom Originalobjekt)
  • Deep Copy bezieht sich auf alle Mitgliedsvariablen des Objekts (wenn es sich um eine Variablenreferenz handelt) sollte geklont werden. Eine flache Kopie bedeutet, dass die Mitgliedsvariablen nicht geklont wurden.
  • Wie klont man ein Objekt?
    • Das geklonte Objekt muss die Cloneable-Schnittstelle implementieren
    • die Klonmethode überschreiben
    • , vorzugsweise in öffentlich geändert
  • Wait & Notify & NotifyAll

    Wait- und Notify-Methoden sind eigentlich Java-APIs, die uns Kommunikation zwischen Threads

    ermöglichen.
    • Unabhängig davon, ob es sich um Wait, Notify oder NotifyAll() handelt, muss es vom Listener-Objekt (Sperrobjekt)
      • Einfach ausgedrückt: Sie werden alle in synchronisierten Codeblöcken aufgerufen, andernfalls wird eine Ausnahme ausgelöst!
    • notify() weckt einen Thread in der Warteschlange (nicht sicher, welcher geweckt wird), weckt die Warteschlange notifyAll() Alle Threads
    • können dazu führen, dass der Thread von
    • in 4 Situationen aktiviert wird wait()
      • Der Thread wird unterbrochen
      • Zeitpunkt wait()
      • wird aktiviert durch
      • notify()
      • wird aktiviert durch
      • notifyAll()
    • Der Thread, der
    • aufruft, wird wait()die Sperre aufheben

    Warum Warten und Benachrichtigen auf der Objektmethode basieren

    • Da unsere Sperre eine Objektsperre ist [Wenn Sie es vergessen, können Sie sich den Java-Sperrmechanismus ansehen, um mehr zu erfahren], kann jedes Objekt zu einer Sperre werden. Lassen Sie den aktuellen Thread auf die Sperre eines Objekts warten
    • Das Sperrobjekt ist willkürlich, also diese Methoden muss in der Object-Klasse definiert werden

    Thread.sleep()Object.wait()

    Beide können pausieren den aktuellen Thread und geben Sie ihm die CPU-Steuerung frei.

    • Der Hauptunterschied besteht darin, dass Object.wait() die Kontrolle über die Objektsperre gleichzeitig mit der Freigabe der CPU freigibt.
    • und
    • hebt die Sperre nicht auf Thread.sleep()

    Aber es sollte beachtet werden, dass:

    Nach der Benachrichtigungsmethode heißt: Der erwachte Thread
    erhält das Sperrobjekt nicht sofort. Warten Sie stattdessen, bis der synchronisierte Codeblock von notify ausgeführt wird, bevor die Methode finalize

    finalize()` das Objekt im Garbage Collector.

    wurde zuvor aufgerufen, aber diese Methode weiß nicht, wann sie aufgerufen werden soll, und weist

    Unsicherheit auf.Im Allgemeinen werden wir sie nicht neu schreiben~Die finalize() Methode eines Objekts

    wird nur einmal aufgerufen
    , und der Aufruf von finalize() bedeutet nicht, dass gc das Objekt sofort wiederverwendet, daher ist es möglich, dass das Objekt nach dem Aufruf von finalize() nicht benötigt wird recycelt werden soll, und dann, wenn es tatsächlich recycelt werden soll. Beim Recycling wird finalize() nicht aufgerufen, was zu Problemen führt, da es bereits einmal aufgerufen wurde.

    Eingehende Analyse der Object-Klasse (Bilder und Text)

    Das obige ist der detaillierte Inhalt vonEingehende Analyse der Object-Klasse (Bilder und Text). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen