13.2 Klassenmethoden
Neben Attributen gibt es auch Methoden, die sich nicht auf ein bestimmtes Objekt beziehen, sondern die gesamte Klasse.
Eine Methode, die nicht als Fähigkeit eines bestimmten Objekt betrachtet wird, sondern als Fähigkeit der gesamten Klasse, wird als Klassenmethode bzw. statische Methode bezeichnet.
Da sich Klassenmethoden nicht auf ein bestimmtes Objekt, sondern die gesamte Klasse beziehen, erfolgt der Zugriff ausschließlich über den Klassennamen.
Im UML-Klassendiagramm werden Klassenmethoden unterstrichen.
In Java erflogt die Deklaration einer Klassenmethode mit Hilfe des Schlüsselworts static.
Der Zugriff auf private Klassenattribute erfolgt über öffentliche Klassenmethoden.
Beispiel
-
Klassenmethoden werden im UML-Klassendiagramm unterstrichen:
Abb. 13-5: Klasse Schulklasse(UML) -
Klassenmethoden werden in Java mit Hilfe des Schlüsselworts
staticdeklariert:JAVApublic static int getKlassenteiler() {
return Schulklasse.klassenteiler;
}
public static void setKlassenteiler(int pKlassenteile) {
Schulklasse.klassenteiler = pKlassenteile;
}Abb. 13-6: Quellcode der Methoden getKlassenteiler(): intundsetKlassenteiler(pKlassenteiler: int) -
Der Zugriff auf eine Klassenmethode erfolgt in Java über den Klassennamen:
JAVASchulklasse.setKlassenteiler(30);
Abb. 13-7: Aufruf der Klassenmethode setKlassenteiler(pKlassenteiler: int)
Statische Methoden in Utility-Klassen
Klassenmethoden eignen sich sehr gut dazu allgemeine Funktionalitäten anzubieten, die für eine Vielzahl von Klassen von Interesse sind.
Zum Beispiel kommt es immer wieder vor, dass Werte gerundet oder formatiert werden müssen. Wird eine entsprechende Methode als Klassenmethode realisiert, kann diese unmittelbar verwendet werden, ohne dass zuvor ein Objekt der Klasse erzeugt werden muss.
Klassen, die ausschließlich allgemeine Funktionalitäten in Form von Klassenmethoden bereitstellen, werden als Utility-Klasse beziehungsweise Hilfsklasse bezeichnet.
Da sie lediglich Klassenmethoden besitzen, ist es nicht notwendig, ein Objekt dieser Klasse zu erzeugen. Üblicherweise verhindert ein privater parameterloser Konstruktor daher, dass Objekte dieser Klasse erzeugt werden können.
Beispiel
Ein Beispiel für eine Utility-Klasse ist die Klasse Math.
public static double pow(double a, double b)pow-Methode dient dem Potenzieren von Zahlen. Der Parameter a nimmt dabei die Basis und der Parameter b den Exponenten auf. Zurückgegeben wird das Ergebnis aus ab.
public static double random()random-Methode liefert eine Zufallszahl aus dem Intervall [0; 1[.
public static long round(double a)double-Wert wird kaufmännisch auf die nächste Ganzzahl vom Typ long gerundet und zurückgegeben.
Math
Aufgabe 13-1: Werkzeug
Erstellen Sie eine Utility-Klasse namens Werkzeug, die die Klassenmethode runden(pZahl: double, pNachkommastellen: int): double bereitstellt. Die Methode soll einen übergebenen double-Wert pZahl auf die ebenfalls übergebene Anzahl von Nachkommastellen pNachkommastellen runden und zurückgeben.
Lösung
private Werkzeug() {
}
public static double runden(double pZahl, int pNachkommastellen){
return Math.round(pZahl* Math.pow(10, pNachkommastellen)) / Math.pow(10, pNachkommastellen);
}
}
Werkzeug (Quellcode)Werkzeug (UML)