Modifier in Java – Eigenschaften von Variablen, Methoden und Klassen verändern

Android Apps Programmieren Online-Kurs

Unser großes
Android Online-Kurs
Gesamtpaket



Weitere Infos

In diesem Beitrag behandeln wir die Modifier von Java und gehen dabei ausführlich auf deren Eigenschaften ein.

Modifier werden in Java-Anwendungen benutzt um die Sichtbarkeit, Lebensdauer und Veränderbarkeit von Programmelementen festzulegen.

Sie üben somit großen Einfluss auf die Eigenschaften von Variablen, Methoden und Klassen aus.

Im Folgenden werden wir jeden Java-Modifier kurz vorstellen und dabei jeweils auf die relevanten Auswirkungen auf Sichtbarkeit, Lebensdauer und Veränderbarkeit von Programmelementen eingehen.

Die unten aufgeführten Modifier sind in Java implementiert:

  • private
  • protected
  • public
  • standard (package scope)
  • static
  • final
  • transient
  • volatile

Java-Modifier: private

Java Modifier

Alle private-Programmelemente besitzen eine verdeckte Sichtbarkeit und sind nur in ihrer eigenen Klasse sichtbar.

Abgeleitete Klassen können nicht auf private-Elemente ihrer Vaterklasse zugreifen.

Auf private-Elemente, wie Variablen und Methoden, kann nicht von außen zugegriffen werden. Für Aufrufer von Instanzen sind private-Elemente nicht sichtbar.

Entwickler sollten immer dann private-Elemente definieren, wenn wichtige Details zu verbergen sind, die in abgeleiteten Klassen und von außen nicht sichtbar sein sollen.

Java-Modifier: protected

Die Elemente (Variablen und Methoden) vom Typ protected sind in der eigenen Klasse und in allen abgeleiteten Klassen sichtbar.

Zudem können protected-Elemente auch von anderen nicht verwandten Klassen innerhalb desselben Pakets gesehen werden.

Für Klassen, die in anderen Paketen definiert wurden, sind protected-Elemente nicht sichtbar.

Java-Modifier: public

Alle Variablen und Methoden vom Typ public sind für die eigene Klasse und alle äußeren Klassen sichtbar. Die public-Elemente können auch von Methoden anderer Klassen verwendet werden, selbst wenn diese Klassen außerhalb des Pakets definiert sind.

In Java muss in jeder Quelldatei genau eine Klasse vom Typ public sein. Nur diese eine öffentliche Klasse ist außerhalb des Pakets sichtbar, in dem sie definiert wurde.

Java-Modifier: standard (package scope)

Java-Elemente, die nicht als public, protected oder private deklariert wurden, erhalten die standard-Sichtbarkeit (auch als package scope bezeichnet). Diese Elemente sind nur innerhalb des Pakets sichtbar, in dem sich die eigene Klasse befindet.

Von außen kann nicht auf standard (package scope)-Elemente zugegriffen werden, sie sind von anderen Paketen aus nicht sichtbar.

Möchte man innerhalb von größeren Paketen Hilfsklassen zugänglich machen, ohne die öffentlich zu machen, bietet sich die standard (package scope) Deklaration an.

Java-Modifier: static

Variablen und Methoden müssen in Java standardmäßig immer über eine Instanz der Klasse aufgerufen werden, in der sie definiert wurden. Möchte man Variablen und Methoden ohne ein konkretes Objekt aufrufen, müssen diese als static deklariert werden.

Mit static deklarierte Programmelemente existieren unabhängig von Objekten, vom Zeitpunkt ab dem die Klasse geladen wurde bis zum Beenden der Java-Anwendung.

Auf static-Elemente wird über die Klasse zugegriffen und nicht über die Instanz der Klasse, dadurch sind diese Elemente statisch und über die gesamte Programmlaufzeit verfügbar.

Java-Modifier: final

Möchte man in Java Konstanten definieren, müssen diese als Variablen vom Typ final deklariert werden. Dadurch ist ein nachträgliches Ändern der Variable nicht mehr möglich und der Initialisierungswert wird über die gesamte Programmlaufzeit gehalten.

Methoden, die als final deklariert sind, können nicht in abgeleiteten Klassen überlagert werden.

Klassen, die als final deklariert wurden, können nicht abgeleitet werden. Bei final-Klassen endet somit der Ableitungszweig.

Hinweis: In Java werden final-Methoden performanter als normale Methoden ausgeführt, da keine dynamische Methodensuche erfolgen muss. Möchte man bestimmte Methoden schneller ausführen lassen, ist es empfehlenswert diese als final zu deklarieren.

Achtung! Der Inhalt eines als final deklarierten Objekts (Instanz) kann auch nach der Initialisierung des Objekts noch verändert werden. Durch die final-Deklaration ist nur das Zuweisen einer neuen Objektreferenz verboten.

Das bedeutet Objektvariablen vom Typ final behalten über die gesamte Laufzeit die anfangs zugewiesene Objektreferenz, wobei sich aber durchaus der Inhalt des referenzierten Objekts verändern kann.

Dies gilt auch für Arrays und Strings, da beide auch als Objekte in Java implementiert sind.

Java-Modifier: transient und volatile

In Java gibt es noch zwei weitere Modifier, beide sind für komplexere Anwendungen vorgesehen und werden daher hier nur kurz erwähnt.

Möchte man, dass bestimmte Variablen beim Serialisieren und Deserialisieren ignoriert werden, müssen diese als transient deklariert werden. Dadurch weiß Java, dass diese Variablen nicht persistent sind.

plhq_teaser_hbox_gelb_fotolia_RA Studio_46292813

Unser großes
Android Online-Kurs
Gesamtpaket



Weitere Infos

Werden Variablen verwendet, die außerhalb des aktuellen Threads verändert werden können, müssen diese als volatile deklariert werden. Eine volatile-Variable wird bei jedem Zugriff erneut gelesen, nicht direkt aus einem Register der virtuellen Maschine entnommen.

Der volatile-Modifier wird bspw. bei Multithreading-Anwendungen eingesetzt und stellt dabei die Datenintegrität sicher.


Comments 4

    1. Post
      Author

      Hallo Walter,

      stimmt, den synchronized-Modifier habe ich nicht beschrieben. Auf der Tutorial-Seite von Oracle habe ich eine schöne Einführung in das Thema gefunden:

      synchronized keyword

      Viele Grüße, Chris

  1. Pingback: Einführung in Java Design Patterns (Software Entwurfsmuster)

  2. Pingback: Klassen in Java: Die Grundlagen der objektorientierten Programmierung

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.