Was ist der Unterschied zwischen final und static in Java?


Beste Antwort

Äh, es handelt sich um völlig unterschiedliche Konzepte.

Ein Mitglied, das als statisch markiert ist gehört eher zur Klasse als zu einer bestimmten Instanz. Manchmal haben Klassen nur statische Elemente. Ein offensichtliches Beispiel ist die java.lang.Double-Klasse, die doppelte Grundelemente „boxt“: Sie können den Wert eines einzelnen Doppels über eine Instanzmethode (myDouble.doubleValue()), aber erhalten Sie „universelle“ Dinge durch statische Elemente (Double.MAX\_VALUE).

Ein als final gekennzeichnetes Mitglied kann * seinen Wert nicht haben (was sein Wert ist) wenn primitiv, oder seine Referenz wenn Objekt) nach der Initialisierung geändert wurde. Möglicherweise können Sie die -Eigenschaften eines Objekts noch ändern (möglicherweise veränderbar ). Sie konnten das Objekt jedoch nicht * durch ein anderes Objekt ersetzen. (* Sie können technisch mit Reflexion, Bytecode-Manipulation oder anderen Methoden „schummeln“, um „die Regeln zu brechen“, aber wenn Sie dies tun, wissen Sie vermutlich , dass Sie erneut „betrügen“.)

Antwort

Um zu wissen, wann

private static final X x;

Sie sollten wissen, wie diese Schlüsselwörter verwendet werden.

Mal sehen

  1. privat – Wird verwendet, wenn Sie bestimmte Mitglieder einer Klasse auf beschränken möchten außerhalb dieser Klasse nicht zugänglich sein.
  2. statisch – Wenn Sie ein Mitglied als statisch deklarieren, ist es mit seiner Klasse verknüpft und kein Objekt. Zur Vereinfachung wird das statische Element beim Laden der Klasse initialisiert. Wenn Sie also den Wert dieses Mitglieds aktualisieren, werden auch alle Stellen aktualisiert, auf die verwiesen wird. Auf statische Mitglieder wird daher über den Klassennamen zugegriffen, und nicht auf ihre Objekte, da der Wert des Mitglieds unabhängig von den Objekten gleich bleibt.
  3. final – Dieses Schlüsselwort definiert bei Verwendung mit Mitgliedsvariablen, dass die geladene Klasse und die Zuweisung des Werts nicht mehr geändert werden können.

Lassen Sie uns also sehen, was passiert Wenn Sie eine Variable wie folgt deklarieren:

private static final String PRIVATE\_STATIC\_FINAL\_STRING = "String";

Jetzt wird

PRIVATE\_STATIC\_FINAL\_STRING als privat definiert, sodass sie gewinnt „t außerhalb der deklarierenden Klasse zugänglich sein“. Es ist auch als statisch definiert, sodass der Wert unabhängig von den Objekten der Klasse gleich bleibt. Und es ist als endgültig definiert. Sobald die Klasse geladen ist, wird der Wert nicht geändert.

Daher funktioniert PRIVATE\_STATIC\_FINAL\_STRING als nicht modifizierbare Zeichenfolge auf Klassenebene, auf die außerhalb der deklarierenden Klasse nicht zugegriffen werden kann.

Ich hoffe, dies hilft Ihnen, Ihre Zweifel auszuräumen. Wenn Sie weitere Hilfe benötigen, Sie können sich an mich wenden und ich werde versuchen, Ihnen so viel wie möglich zu helfen.

Viel Glück und viel Spaß beim Lernen!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.