JavaRush /Java-Blog /Random-DE /Modifikatoren oder wie man Verzauberungen in der Java-Wel...
Petr Gorskin
Level 22
Москва

Modifikatoren oder wie man Verzauberungen in der Java-Welt wirkt

Veröffentlicht in der Gruppe Random-DE
Guten galaktischen Tag, Kameraden! Dies ist mein erstes interplanetares Manuskript, und da ich Ingenieur bin, kann die Interpretation einiger Konzepte in einer außerirdischen Sprache erfolgen.
Modifikatoren oder wie man Verzauberungen in der Welt von Java wirkt - 1
Einleitung Meiner Meinung nach ist Java wie ein endloser Korridor mit Türen (Paket). Hinter jeder dieser Türen befindet sich Freiraum und ein Aktenschrank, in dem ein Berg magischer Schriftrollen mit Anleitungen (Klassen) zum Erstellen von Objekten aufbewahrt wird. Jede Schriftrolle beschreibt eine Reihe von Merkmalen (Variablen) und Fähigkeiten (Methoden) – Aktionen (Felder), die entweder an der Klasse selbst oder an einem auf ihrer Basis zusammengesetzten Objekt ausgeführt werden. Stellen wir uns in dieser Phase vor, wir seien Zauberer und versuchen, eine völlig neue Anweisung (Klasse) zu erstellen. Also: Modifikatoren oder wie man Verzauberungen in der Java-Welt wirkt - 2Lasst uns das Elixier der Weisheit trinken (die Grundlagen lernen) und anfangen, Anweisungen zu schreiben. Zugriffs- und Nichtzugriffsmodifikatoren Stellen wir uns vor, dass jede Anweisung und ein darauf basierendes Objekt sowie seine Eigenschaften und Fähigkeiten zunächst magisch verzaubert werden, d. h. Ihnen werden bestimmte Sätze von Modifikatoren zugewiesen. Versuchen wir, einen Leitfaden zu möglichen Verzauberungen zu erstellen.
  1. Der Zugriffsmodifikator , der die Zugänglichkeit einer Klasse, eines Objekts oder eines Felds beschreibt, ist erforderlich: Wenn er nicht vorhanden ist , weist die JVM (dies ist eine solche Quelle universeller Magie) dem Paket automatisch eine Standardkennung zu.

    Ab dem zweiten Modifikator gibt es Nichtzugriffsmodifikatoren, die nicht zwingend erforderlich sind und auch miteinander in Konflikt stehen können (aber das Wichtigste zuerst).

  2. Der Static- Modifikator gibt an, dass die Klasse, das Objekt oder das Feld statisch ist. Aber was bedeutet es? Grundsätzlich werden wir es auf den Feldern versuchen.

    Statische Variablen werden Klassenvariablen genannt und gelten für alle Instanzen dieser Klasse eindeutig. Statische Methoden können aufgerufen werden, ohne das Objekt zu erstellen, in dem sie deklariert sind. Statische Klassen werden verwendet, wenn eine Klasse in eine andere verschachtelt wird, und das Prinzip der Interaktion zwischen der inneren und der äußeren Klasse ähnelt Methoden (dies ist ein Thema für eine separate Diskussion). Kann auch als separater Block innerhalb eines Objekts verwendet werden.

  3. Der Final- Modifikator zeigt einer Variablen effektiv an, dass es sich um eine Konstante handelt. Für Methoden – dass sie bei der Vererbung nicht überschrieben werden können, für Klassen ist dies jedoch ein Hinweis darauf, dass sie nicht von ihr vererbt werden können (unveränderlich).

    Die statischen und finalen Modifikatoren gelten für Klassen, Objekte und Felder. Es gibt jedoch Modifikatoren, die nur für einige von ihnen gelten (oder sogar für einen Teil davon, da sowohl eine Variable als auch eine Methode ein Feld sind, aber nicht alle Modifikatoren für beide gelten). Wenn wir eine Analogie ziehen, können nur Stiefel und Handschuhe auf Geschwindigkeit verzaubert werden (um sie schneller zu bewegen), aber einen Hut auf Geschwindigkeit zu verzaubern ist sinnlos (und der Universal Supervisory Council (Compiler) wird dies nicht zulassen).

  4. Der Abstract- Modifikator gilt nur für Methoden und Klassen . Eine abstrakte Methode ist eine Methode ohne Implementierung (Körper).

    Wenn eine Klasse als abstrakt markiert ist, enthält sie entweder abstrakte Methoden oder verhindert die Erstellung von Instanzen dieser Klasse. Wenn wir eine Analogie ziehen, sehen Sie in der Mitte der Anleitung die Überschrift „Einen Gegenstand einfärben“, danach gibt es keine Beschreibung. Diese. Mit dieser Anleitung können Sie ein Objekt erstellen und es auch einfärben, aber diese spezielle Anleitung sagt nicht, wie (schreiben Sie Ihre eigenen Anweisungen zum Erstellen eines roten Objekts basierend auf diesem Objekt und beschreiben Sie, wie es eingefärbt wird).

Beim Arbeiten in einer Multithread-Umgebung können spezielle Modifikatoren verwendet werden:
  1. Der Modifikator Syncronized wird nur für Methoden verwendet. Sein Vorhandensein zeigt an, dass es jeweils nur von einem Thread ausgeführt werden kann. Kann auch als separater Codeblock innerhalb eines Objekts verwendet werden (Angabe des Synchronisationsobjekts).

  2. Volatile- Modifikator – nur für Variablen . Es wird empfohlen, es für Variablen zu verwenden, die von mehreren Threads gleichzeitig verwendet werden können. Eine Variable mit einem solchen Modifikator wird bei jeder Änderung sofort aus dem Prozessor-Cache in den Hauptspeicher kopiert, sodass parallele Threads den neuesten Wert erhalten können.

    Es ist erwähnenswert, dass volatile in Fällen anwendbar ist, in denen nur ein Thread in eine Variable schreiben kann und der Rest nur daraus lesen kann. In anderen Fällen ist es besser, den synchronisierten Modifikator zu Methoden hinzuzufügen, die in eine flüchtige Variable schreiben.

  3. Transientenmodifikator – nur für Variablen . Dieser Modifikator markiert Variablen, die beim Serialisieren eines Objekts übersprungen werden müssen (dies ist ein so intelligenter Prozess, dass Sie ihn im Prinzip selbst nachlesen können...)*

    * - Ich habe diesen Artikel auf Stufe 17 geschrieben und bis dahin war die Serialisierung als Prozess noch nicht beschrieben worden. Daher empfehle ich Ihnen, ihn bei Bedarf selbst zu studieren, anstatt ihn zu kopieren und einzufügen.

Widersprüchliche Modifikatorpaare Zusätzlich zur Anwendbarkeit von Modifikatoren auf verschiedene Klassen, Objekte und Felder gibt es auch das Konzept widersprüchlicher Paare. Nehmen wir an, wenn man einen Helm mit Stärke verzaubert, wird er schwer, und gleichzeitig möchte man ihn so verzaubern, dass er leicht ist. Das eine passt nicht zum anderen.
  1. Endgültig und flüchtig – wenn es um Variablen geht, können wir nicht gleichzeitig sagen, dass sie endgültig (konstant) sind und dass mehrere Threads die Fähigkeit haben, sie zu ändern … Schließlich ist sie konstant und kann jederzeit von einem Thread gelesen werden , aber kein einziger Thread kann die Konstante ändern (der Universal Supervisory Council wird dies nicht zulassen).
  2. Endgültig und abstrakt – Klassen und Methoden können nicht sowohl abstrakt (was in den meisten Fällen die Notwendigkeit einer Klärung für die Implementierung impliziert) als auch endgültig sein, d. h. unveränderlich. Es stellt sich heraus, dass in der Anleitung steht, wie man aus einem beliebigen Material einen guten, haltbaren Helm herstellt (abstrakter Teil), aber dafür dürfen darin keine Löcher sein (der letzte obligatorische Teil, kann nicht geändert werden).
  3. Abstrakt und statisch – Eine abstrakte Methode kann nicht gleichzeitig statisch oder synchronisiert sein. Eine statische abstrakte Methode macht keinen Sinn, weil sie nicht nur nichts tut, sondern auch zu einer ganzen Klasse gehört – das Ergebnis ist nutzlos.
  4. Abstrakt und synchronisiert – welchen Sinn hat es, die Arbeit mit einer Methode zu synchronisieren, die nichts bewirkt?
Zusammenfassend ist die Beschreibung der Modifikatoren beendet, alle Konflikte wurden geklärt und jetzt können Sie das Ergebnis mit einem Spickzettel – einem Verzauberungsdiagramm – festigen: Modifikatoren oder wie man Verzauberungen in der Welt von Java wirkt - 3Abschließend möchte ich sagen, dass das Schreiben dieses Artikels die Verwirklichung meines Wunsches war Modifikatoren zu studieren. Ob die Erfahrung erfolgreich ist oder nicht, liegt bei Ihnen. Ich warte auf Ihre Vorschläge zur Verbesserung/Korrektur, und vielleicht schaffen wir es gemeinsam, daraus ein sehr nützliches Handbuch für Java-Anfänger zu machen.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION