Eine statische Methode gehört zur Klasse selbst, nicht zu einer einzelnen Instanz. Man ruft sie über den Klassennamen auf, ohne vorher ein Objekt zu erzeugen.

Einfaches Beispiel (Java)

public class MathUtil {
    public static double quadrat(double x) {
        return x * x;
    }
}

// Aufruf ohne new:
double ergebnis = MathUtil.quadrat(3.0);

Das Schlüsselwort static markiert die Methode als klassenbezogen. Sie kann keine Instanzvariablen lesen oder schreiben, weil kein Objekt existiert, auf das sie sich beziehen könnte — folglich gibt es in ihr auch kein this (siehe this / self).

Python: staticmethod und classmethod

Python unterscheidet zwei Varianten:

class Converter:
    @staticmethod
    def km_in_meilen(km):
        return km * 0.621371

    @classmethod
    def aus_kilometer(cls, km):
        instanz = cls()
        instanz._wert = km
        return instanz
  • @staticmethod: eine normale Funktion innerhalb der Klasse, ohne Zugriff auf die Klasse oder Instanz.
  • @classmethod: bekommt die Klasse selbst als ersten Parameter (cls) übergeben. Damit kann sie neue Instanzen erzeugen — ein klassisches Muster für Factory-Methoden wie from_json() oder aus_kilometer().

Typische Einsatzfelder

  • Utility-Funktionen: mathematische Helfer, Formatierungen, Umrechnungen ohne eigenen Zustand (z.B. Math.sqrt in Java/C#).
  • Factory-Methoden: benannte Alternativen zum Konstruktor, besonders als @classmethod in Python.
  • Singleton-Zugriff: kombiniert mit einem private-Konstruktor (Kapselung der Kapselung-Logik), damit nur die statische Methode die eine Instanz liefert.
  • Klassenweite Zähler oder Konstanten: Werte, die nicht an ein einzelnes Objekt gebunden sind.

Abgrenzung zur Instanzmethode

Eine Instanzmethode bekommt die Referenz auf das eigene Objekt (in Python self, in Java/C++ implizit this) und darf dessen Zustand lesen und verändern. Eine statische Methode hat diese Referenz nicht — sie kann nur mit ihren Parametern und klassenweiten Werten arbeiten. Statische Methoden unterstützen Overloading (mehrere Varianten mit unterschiedlicher Parameterliste), aber kein echtes Overriding: Sie hängen an der Klasse, nicht am Objekt, daher greift keine dynamische Bindung.

Pitfalls

  • Schwer testbar: Statische Methoden lassen sich beim Testen schwer isolieren oder ersetzen; Abhängigkeiten nimmt man besser per Dependency Injection in die Klasse.
  • Versteckter globaler Zustand: Eine statische Variable, die von vielen Stellen verändert wird, ist im Grunde eine versteckte Globalvariable.
  • Zu viel static: Wenn fast alle Methoden statisch sind, arbeitet man objektorientiert an der Objektorientierung vorbei — dann ist eine modulare Funktionssammlung oft ehrlicher.

Verwandte Grundlagen: Methode, Getter und Setter.