Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


4.6.1

Modifier für Datenelemente



Java kennt einige Modifier, mit denen Datenelemente versehen werden können. Durch diese Modifier erhält ein Datenelement Eigenschaften, die es normalerweise nicht hat. Die Modifier werden einfach der Definition des Datenelements vorangestellt:
   final int KONSTANTE = 55;
Im Einzelnen gibt es für Datenelemente die folgenden Modifier:

final

Mit final können Konstanten deklariert werden. Normalerweise wird der Wert einer Konstanten direkt bei der Deklaration angegeben. Der Wert steht also bereits beim Kompilieren fest.

[1.1]Für Fälle, in denen der Wert der Konstanten erst zur Laufzeit ermittelt werden kann, wurden in Version 1.1 die leeren Finals eingeführt. Leere Finals sind Datenelemente mit dem Modifier final, denen in der Deklaration noch kein Wert zugewiesen wird. Die Wertzuweisung erfolgt: Die Wertzuweisung darf höchstens einmal erfolgen. Eine mehrfache Wertzuweisung wird vom Compiler ebenso zurückgewiesen wie ein lesender Zugriff ohne vorhergehende Zuweisung.
  public class FinalDemo {
    final int x = 100;   // "normale" Konstante
    final String s;      // leeres Final
  
    // Zuweisung zur Laufzeit im Konstruktor
    public FinalDemo(String s) {
      this.s = s;
    }
  
    // statisches leeres Final
    final static int staticFinal;
  
    // Zuweisung beim Laden der Klasse
    // in statischer Initalisierung
    static {
       staticFinal = 111;
    }
  
  }
Bei Datenelementen, die einen Referenztyp haben, stellt final lediglich sicher, dass die Referenz nicht geändert wird. Das referenzierte Objekt kann dagegen sehr wohl verändert werden.

static

Normale Datenelemente sind einem bestimmten Exemplar zugeordnet. Mit jedem neuen Exemplar wird ein eigener Speicherplatz für jedes Datenelement des neuen Exemplars belegt. Ein mit static deklariertes Datenelement dagegen ist allen Exemplaren physikalisch gemeinsam und somit gewissermaßen eine Klassen-globale Variable. Man spricht daher auch von Klassenvariablen im Gegensatz zu den nicht statischen Exemplarvariablen. Ändert ein Exemplar den Wert eines static-Datenelements, dann macht sich diese Änderung auch bei allen anderen Exemplaren bemerkbar.

volatile

Bei mit volatile gekennzeichneten Datenelementen geht der Compiler davon aus, dass sie durch andere Threads verändert werden können, und trifft entsprechende Vorkehrungen, damit stets Konsistenz gewährleistet ist. Beispielsweise wird der Wert eines volatile-Datenelements vor jedem lesenden Zugriff neu ermittelt. Ohne diesen Zusatz gestattet die Spezifikation es den Compilern, zur Optimierung Caching-Strategien einzusetzen. volatile wird hauptsächlich eingesetzt, wenn ein Datenelement durch Native-Code verändert wird oder wenn sichergestellt werden muss, dass ein Thread stets den aktuellen Wert eines Datenelements verwendet, wenn dieses unsynchronisiert von einem anderen Thread manipuliert wird.

transient

Der Modifier transient ist zwar seit Java 1.0 ein Schlüsselwort, hat aber erst in Version 1.1 eine Semantik erhalten. Er signalisiert, dass ein Datenelement nicht zum persistenten Zustand eines Objekts gehört. Wenn eine Klasse, die das Interface java.io.Serializable implementiert, von einem ObjectOutputStream persistent gemacht wird, werden transient-Datenelemente nicht mitgespeichert. Bei der Rekonstruktion des Objekts aus den persistenten Daten werden diese transient-Datenelemente standardmäßig mit dem Initialwert des entsprechenden Datentyps belegt.

Kombination von Modifiern

Mit Ausnahme von final und volatile können die Modifier auch kombiniert werden. So deklariert man häufig Konstanten als final static, zum einen, damit nicht für jedes Exemplar neuer Speicherplatz belegt werden soll, und zum anderen, damit andere Klassen die Konstanten benutzen können, ohne selbst ein Exemplar anzulegen.

Darüber hinaus gibt es noch Modifier, die die Zugriffsrechte auf ein Datenelement festlegen. Sie werden im Abschnitt 4.10.1 beschrieben.


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.