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.

Merke: Klassenattribut
Beispiel
  • Klassenmethoden werden im UML-Klassendiagramm unterstrichen:

    img/Abb_13_1_UML_Schulklasse.svg
    Abb. 13-5: Klasse Schulklasse (UML)
  • Klassenmethoden werden in Java mit Hilfe des Schlüsselworts static deklariert:

    JAVA
    public static int getKlassenteiler() {
        return Schulklasse.klassenteiler;
    }

    public static void setKlassenteiler(int pKlassenteile) {
        Schulklasse.klassenteiler = pKlassenteile;
    }
    Abb. 13-6: Quellcode der Methoden getKlassenteiler(): int und setKlassenteiler(pKlassenteiler: int)
  • Der Zugriff auf eine Klassenmethode erfolgt in Java über den Klassennamen:

    JAVA
    Schulklasse.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.

Merke: Utility-Klasse beziehungsweise Hilfsklasse
Beispiel

Ein Beispiel für eine Utility-Klasse ist die Klasse Math.

img/Abb_13_8_UML_Math.svg
java.lang.Math
public static double pow(double a, double b)
Die 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()
Die random-Methode liefert eine Zufallszahl aus dem Intervall [0; 1[.
public static long round(double a)
Ein übergebene double-Wert wird kaufmännisch auf die nächste Ganzzahl vom Typ long gerundet und zurückgegeben.
Abb. 13-8: Klasse Math
Aufgabe

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
Lösung
JAVA
public class Werkzeug {

    private Werkzeug() {
        
    }
    
    public static double runden(double pZahl, int pNachkommastellen){
        return Math.round(pZahl* Math.pow(10, pNachkommastellen)) / Math.pow(10, pNachkommastellen);
    }
    
}
Abb. 13-9: Klasse Werkzeug (Quellcode)
img/Abb_13_9_UML_Werkzeug.svg
Abb. 13-10: Klasse Werkzeug (UML)