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.7.5

Modifier für Methoden



Auch Methoden können mit Modifiern versehen werden. Die Modifier werden im Kopf der Methode vor den Ergebnistyp geschrieben:
   final int getX() {
     return x;
   }
Für Methoden sind die folgenden Modifier verfügbar:

final

Eine mit final gekennzeichnete Methode kann nicht überschrieben werden. Es ist aber möglich, eine Methode mit demselben Namen und einer anderen Signatur hinzuzufügen. Methoden können implizit final sein, nämlich genau dann, wenn sie in einer als final vereinbarten Klasse stehen. final kann auch zur Optimierung eingesetzt werden. Wenn eine Methode, die nicht mehr überschrieben wird, als final deklariert wird, benötigt der Aufruf deutlich weniger Zeit.

static

static-Methoden stehen in völliger Analogie zu den static-Datenelementen. Sie werden ebenfalls der Klasse und nicht einem Objekt zugeordnet. Sie heißen daher auch Klassenmethoden. Nicht statische Methoden werden analog auch Exemplarmethoden genannt.

Entsprechend kann eine statische Methode auch aufgerufen werden, ohne dass zuvor ein Objekt angelegt wurde. Es gibt auch Klassen, von denen gar keine Exemplare erzeugt werden können und die ausschließlich statische Methoden enthalten, wie z. B. java.lang.Math. Beim Aufruf sollte die Methode stets mit dem Namen der Klasse qualifiziert werden:
  int maximum = Math.max(5, 3);
Bei Klassen, von denen Exemplare erzeugt werden können, kann eine statische Methode zwar auch über eine Referenz auf ein Objekt qualifiziert werden, jedoch gilt dies als schlechter Stil, da aus dem Aufruf nicht direkt ersichtlich ist, dass es sich um eine Klassenmethode handelt.
  class StaticDemo {
  
    public static void test() {
    }
  
  }
  ...
  StaticDemo s = new StaticDemo();
  s.test();           // möglich, aber schlechter Stil
  StaticDemo.test();  // besser
Besonders zu beachten ist, dass innerhalb von static-Methoden nur auf Datenelemente und Methoden zugegriffen werden darf, die ebenfalls static sind. static-Methoden gelten implizit als final und können von daher nicht überschrieben werden.

native

Der native-Modifier erlaubt das Einbinden von Programmcode, der in einer anderen Programmiersprache geschrieben wurde. Eine native-Deklaration besteht nur aus dem Methodenkopf, der von einem Semikolon abgeschlossen wird. Die Methode hashCode() der Klasse Object ist zum Beispiel folgendermaßen deklariert:
  public native int hashCode();
Die Implementierung einer native-Methode muss sich in einer Shared Library befinden, die dann mit dem Aufruf System.load() oder System.loadLibrary() geladen wird. Wenn eine native-Methode überschrieben wird, kann die neue Methode ebenfalls native sein, sie kann aber auch in Java implementiert sein.

synchronized

synchronized wird im Zusammenhang mit Thread-Programmierung verwendet, um sicherzustellen, dass eine oder mehrere Methoden nicht von mehreren Threads gleichzeitig ausgeführt werden können.

Von den synchronized-Exemplarmethoden eines Exemplars kann nur jeweils eine zum selben Zeitpunkt ausgeführt werden. Dasselbe gilt für die Klassenmethoden, allerdings sind hier auch andere Exemplare von der Sperre betroffen. Im Abschnitt 11.7.2 wird synchronized ausführlich behandelt.

Beim Überschreiben einer synchronized-Methode ist zu beachten, dass die Methode der Unterklasse nicht automatisch auch synchronized ist. Falls die neue Methode auch synchronisiert sein soll, muss dies explizit angegeben werden.

abstract

Mit dem Schlüsselwort abstract werden abstrakte Methoden gekennzeichnet. Abstrakte Methoden sind dazu gedacht, lediglich die Aufrufstruktur, nicht aber die Implementierung festzulegen. Sie dürfen nur in Klassen deklariert werden, die ebenfalls abstrakt sind. Sie müssen in einer Unterklasse, die nicht abstrakt ist, überschrieben werden, damit sie benutzt werden können. Eine abstract-Deklaration besteht wie eine native-Deklaration nur aus dem Methodenkopf, gefolgt von einem Semikolon. Als Beispiel sei die Klasse java.lang.Number genannt, die die Oberklasse der Wrapper-Klassen der numerischen Datentypen ist. Sie definiert die Methoden zur Umwandlung in andere numerische Typen als abstrakt:
public abstract class Number
       implements java.io.Serializable {
  ...
  public abstract int intValue();
  public abstract long longValue();
  ...
}
Diese Methoden werden in den Unterklassen von Number wie z. B. Integer überschrieben.

strictfp

[1.2]Durch die Angabe dieses Modifiers wird in der Methode die erweiterte Gleitpunktdarstellung deaktiviert.

Kombination von Modifiern

Modifier können auch kombiniert werden. Eine Ausnahme hiervon ist die Kombination private und abstract. private ist einer der Modifier, der Zugriffsrechte auf die Methode bestimmt. Diese Modifier sind Gegenstand des Abschnitts 4.10.1.

Die Kombination static und abstract ist nur bei geschachtelten Top-Level-Klassen erlaubt.


 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.