Tech Archive Help

12 Java – Modifizierer und Zugriffsrechte

In Java sind Modifizierer (engl. modifiers) Schlüsselwörter, die die Eigenschaften von Klassen, Methoden, Variablen und anderen Elementen ändern. Sie beeinflussen den Zugriff, das Verhalten und die Lebensdauer dieser Elemente. Es kann zwischen 6 Kategorien von Modifizieren unterschieden werden.

  • Zugriffsmodifizierer

  • Klassenmodifizierer

  • Feldmodifizierer

  • Methodenmodifizierer

  • Interface-Modifizierer

  • Konstruktormodifizierer

Zugriffsmodifizierer

Ob auf Klassen, Schnittstellen, Methoden etc. zugegriffen werden kann, wird über die Access Modifier gesteuert. Sie können auf fast allen Konstrukten wie Klassen, Interfaces, Variablen etc. angewendet werden. Die folgenden vier Access Modifier werden verwendet.

  • public

  • private

  • protected

  • package-private

Klassenmodifizierer

Klassen können die folgenden Modifier verwenden.

  • Access Modifier

  • abstract

  • sealed (Seit Java 17)

  • non-sealed (Seit Java 17)

  • permits (Seit Java 17)

  • final

  • strictfp (Seit Java 17 redundant)

  • static

Feldmodifizierer

Klassen- und Objektvariablen können die folgenden Modifier verwenden.

Methodenmodifizierer

Methoden können die folgenden Modifier verwenden.

  • Access Modifier

  • abstract

  • static

  • final

  • native

  • strictfp (Seit Java 17 redundant)

  • synchronized

Interface-Modifizierer

Interfaces können die folgenden Modifier verwenden.

  • Access Modifier

  • abstract (Explizite Angabe redundant, da Methoden intern abstrakt sind)

  • strictfp (Seit Java 17 redundant)

  • static

  • sealed (Seit Java 17)

  • non-sealed (Seit Java 17)

Konstruktormodifizierer

Mit Ausnahme der Access Modifier verwenden Konstruktoren keine zusätzlichen Modifier.

Modifier

Folgende Tabelle wurde bereits in Kapitel 1 – Token: Modifier gezeigt.

Keyword

Anwendungsbereich

Beschreibung

abstract

Methoden

Klassen

  • Enthält eine Klasse mindestens eine abstrakte Methode, muss auch diese Klasse den Modifier tragen.

  • Eine abstrakte Klasse kann nicht instanziiert werden.

  • Abstrakte Methoden besitzen keinen Rumpf und müssen von Kindklassen implementiert werden.

final

Variablen

Konstanten

Methoden

Klassen

  • Variablen können nicht überschrieben werden.

  • Konstanten können nicht überschrieben werden.

  • Methoden können nicht überschrieben werden.

  • Von Klassen kann nicht geerbt werden.

native

Methoden

  • Gibt an, dass eine Methode in nativem Code mithilfe von JNI implementiert ist. Die in C oder C++ implementierten Methoden werden native Methoden oder fremde Methoden genannt. native gibt an, dass eine Methode in plattformabhängigem Code implementiert ist, der häufig in diesen Sprachen vorkommt.

package-private

Variablen

Konstanten

Methoden

Klassen

Konstruktoren

  • Wird automatisch intern angewendet, wenn kein anderer Access Modifier zugewiesen wird. Eine Ausnahme sind Konstruktoren in Enumerationen. Dort ist es standardmäßig private.

  • Kann nicht von Entwicklern gesetzt werden.

  • Konstrukte mit diesem Modifier sind nur innerhalb desselben Package sichtbar.

private

Variablen

Konstanten

Methoden

Innere Klassen

Konstruktoren

  • Zugriff nur innerhalb der Klasse.

protected

Variablen

Konstanten

Methoden

Innere Klassen

Konstruktoren

  • Zugriff von Kindklassen

  • Zugriff von allem innerhalb desselben Package.

public

Variablen

Konstanten

Methoden

Klassen

Konstruktoren

  • Zugriff von überall.

static

Variablen

Konstanten

Methoden

Innere Klassen

  • Objektunabhängiger Zugriff.

  • Zugriff über den Klassennamen.

strictfp

Methoden

Klassen

  • Sicherstellung, dass Fließkommaoperationen auf allen Plattformen gleich berechnet werden und nicht von der Art des Prozessors oder der Implementierung der JVM abhängen.

  • Klassen oder Methoden mit diesem Keyword führen alle Operationen in Übereinstimmung mit dem IEEE 754 Standard durch.

  • Ab Java 17 werden alle Operationen standardmäßig mit IEEE 754 durchgeführt. strictfp ist daher redundant geworden. In speziellen Umgebungen oder in älteren Java-Versionen hat das Keyword möglicherweise noch Relevanz.

synchronized

Methoden

  • Auf Methoden kann immer nur von einem Thread zugegriffen werden.

transient

Variablen

Methoden

  • Variablen eines Objekts werden bei der Serialisierung nicht berücksichtigt.

  • Methoden eines Objekts werden bei der Serialisierung nicht berücksichtigt.

volatile

Variablen

Konstanten

  • Alle Threads lesen und schreiben den Wert der Variablen direkt aus dem Hauptspeicher, anstatt eine Kopie im Cache zu verwenden. Damit wird sichergestellt, dass die Threads den aktuellen Wert sehen und inkonsistente oder falsche Ergebnisse verhindert werden.

sealed, non-sealed & permits

Seit Java 17 gibt es die Modifier sealed, non-sealed und permits. Obwohl auch diese häufig als Keywords bezeichnet werden, ist es zumindest bei sealed und permits möglich, diese als Identifier zu nutzen. Da non-sealed einen Operator enthält, funktioniert dies nicht bei diesem Modifier.

Die Keywords dienen dazu Klassen und Interfaces zu versiegeln und somit die Erweiterbarkeit (Vererbung) einer Klassenhierarchie einzuschränken. Mehr dazu in Kapitel 14 – OOP: Versiegelte Klassen und Interfaces.

Last modified: 19 August 2024