1. Statische Methoden
Neben statischen Variablen können Klassen auch statische Methoden haben.
Reguläre Methoden sind an Objekte (Instanzen) einer Klasse gebunden und können auf gewöhnliche (nicht statische) Variablen der Klasse (sowie auf statische Variablen und Methoden ) verweisen. Statische Methoden sind an das statische Objekt der Klasse gebunden und können nur auf die statischen Variablen und/oder andere statische Methoden der Klasse zugreifen.
Um eine gewöhnliche (nicht statische) Methode für eine Klasse aufzurufen, müssen Sie zunächst ein Objekt der Klasse erstellen und dann die Methode für das Objekt aufrufen. Sie können keine gewöhnliche Methode für die Klasse anstelle eines Objekts aufrufen.
Beispiel:
Sie können keine nicht statische Methode für eine Klasse aufrufen! |
---|
|
Um jedoch eine statische Methode aufzurufen, reicht es aus, dass das statische Objekt der Klasse einfach existiert (und es existiert immer, nachdem die Klasse in den Speicher geladen wurde). Aus diesem Grund ist die Methode main() statisch. Es ist an das statische Objekt der Klasse gebunden, sodass Sie keine Objekte erstellen müssen, um es aufzurufen.
Um eine Methode als statisch zu deklarieren, müssen Sie das Schlüsselwort static vor den Methodenheader schreiben. Das allgemeine Erscheinungsbild dieses Konstrukts ist wie folgt:
static Type name(parameters)
{
method code
}
Beispiele:
Code | Notiz |
---|---|
|
Die Java-Maschine ruft die main Methode mit einem Befehl wie diesem auf: Solution.main() ; Die statische test() Methode wird in der statischen Methode aufgerufen main() . |
Um eine statische Methode aus einer anderen Klasse aufzurufen, müssen Sie den Klassennamen vor dem Namen der statischen Methode angeben. Das allgemeine Erscheinungsbild dieses Konstrukts ist wie folgt:
Type name = ClassName.methodName(arguments)
Beispiele:
Code | Statische Methode |
---|---|
|
|
|
|
|
|
2. Statische vs. gewöhnliche (nicht statische) Methoden
Was ist der Unterschied zwischen statischen und gewöhnlichen Methoden?
Eine gewöhnliche Methode ist an ein gewöhnliches Objekt (eine Instanz einer Klasse) gebunden, eine statische Methode hingegen nicht. Eine gewöhnliche Methode kann auf Variablen in ihrer Instanz zugreifen, eine statische Methode jedoch nicht: Sie verfügt einfach nicht über eine zugehörige Instanz.
Die Unterschiede zwischen den beiden Methodentypen werden in der folgenden Tabelle ausgedrückt:
Fähigkeit/Eigenschaft | Gewöhnliche Methode | Statische Methode |
---|---|---|
An eine Instanz der Klasse gebunden | Ja | NEIN |
Kann gewöhnliche Methoden der Klasse aufrufen | Ja | NEIN |
Kann statische Methoden der Klasse aufrufen | Ja | Ja |
Kann auf gewöhnliche Variablen der Klasse zugreifen | Ja | NEIN |
Kann auf statische Variablen der Klasse zugreifen | Ja | Ja |
Kann für ein Objekt aufgerufen werden | Ja | Ja |
Kann für die Klasse aufgerufen werden | NEIN | Ja |
Warum werden solche Methoden benötigt, wenn sie so stark eingeschränkt sind? Die Antwort ist, dass dieser Ansatz auch seine Vorteile hat.
Erstens müssen Sie keine Objektreferenz übergeben, um auf statische Methoden und Variablen zuzugreifen.
Zweitens muss es manchmal nur eine einzige Instanz einer Variablen geben. Zum Beispiel System.out
( die statische Ausgabevariable der System-Klasse ).
Und drittens muss man manchmal eine Methode aufrufen, bevor überhaupt Objekte erstellt werden können. Beispielsweise ruft die Java-Maschine die Methode main() auf, um die Ausführung des Programms zu starten, noch bevor eine Instanz der Klasse erstellt wird.
An eine Instanz der Klasse gebunden
Wenn eine gewöhnliche Methode aufgerufen wird, wird ihr implizit ein Argument – das Objekt, für das die Methode aufgerufen wird – übergeben. Dieser Parameter heißt this
. Dieser implizite Parameter (ein Verweis auf das Objekt, für das die Methode aufgerufen wird) unterscheidet gewöhnliche Methoden von statischen.
Statische Methoden verfügen nicht über diesen impliziten Parameter, daher können Sie das this
Schlüsselwort nicht innerhalb statischer Methoden verwenden und Sie können keine nicht statische Methode innerhalb einer statischen Methode aufrufen. Es gibt einfach nirgendwo einen Verweis auf eine Instanz einer Klasse.
Kann gewöhnliche Methoden der Klasse aufrufen
Eine gewöhnliche Methode verfügt immer über den impliziten this
Parameter, sodass Sie immer einen Verweis auf das Objekt haben, für das die Methode aufgerufen wird. Immer wenn Sie eine gewöhnliche Methode innerhalb einer anderen gewöhnlichen Methode aufrufen, wird der implizite this
Parameter verwendet, um diesen Aufruf durchzuführen. Beispiel
Code | Wie es funktioniert |
---|---|
|
|
Aus diesem Grund können Sie eine gewöhnliche Methode nicht von einer statischen Methode aus aufrufen. Es gibt einfach keine implizite Variable mit dem Namen this
innerhalb einer statischen Methode.
Oder stellen Sie sich eine andere Situation vor: In unserem Programm wurde noch kein einziges Objekt unserer Klasse erstellt. Können wir eine statische Methode unserer Klasse aufrufen? Ja. Und kann diese statische Methode eine gewöhnliche (nicht statische) Methode aufrufen?
Nun, bei welchem Objekt würden wir es nennen? Schließlich existiert noch keine einzige Instanz unserer Klasse!
Kann statische Methoden der Klasse aufrufen
Statische Methoden können von überall aufgerufen werden – von jeder Stelle im Programm. Dies bedeutet, dass sie sowohl von statischen als auch von gewöhnlichen Methoden aufgerufen werden können. Hier gibt es keine Einschränkungen.
Kann auf gewöhnliche Variablen der Klasse zugreifen
Sie können über eine gewöhnliche Methode auf gewöhnliche Variablen einer Klasse zugreifen, da diese über den impliziten Parameter leicht einen Verweis auf eine Instanz der Klasse erhalten kann this
.
Eine statische Methode weiß nicht, welche Instanz der Klasse sie verwenden soll, um Werte gewöhnlicher Variablen abzurufen. Und allgemeiner kann es leicht vorkommen, dass eine statische Methode aufgerufen wird, aber noch keine einzige Instanz der Klasse im Programm erstellt wurde.
Daher können statische Methoden nicht auf gewöhnliche Variablen einer Klasse zugreifen.
Angenommen, eine statische Methode ruft eine gewöhnliche Methode auf. Für welches Objekt soll diese gewöhnliche Methode aufgerufen werden?

Niemand weiß! Aus diesem Grund können Sie keine gewöhnliche Methode von einer statischen Methode aufrufen, ohne einen Verweis auf ein Objekt zu übergeben!
Kann auf statische Variablen der Klasse zugreifen
Bei Aufrufen statischer Variablen verhält es sich genauso wie bei Aufrufen statischer Methoden. Auf statische Variablen kann von überall im Programm zugegriffen werden. Das bedeutet, dass Sie mit statischen und gewöhnlichen Methoden darauf zugreifen können.
Kann für ein Objekt aufgerufen werden
Für ein Objekt können sowohl statische als auch gewöhnliche Methoden aufgerufen werden. Ein gewöhnlicher Methodenaufruf ist möglich – tatsächlich ist dies die einzige Möglichkeit, eine gewöhnliche Methode aufzurufen. Eine statische Methode kann auch für ein Objekt aufgerufen werden: In diesem Fall bestimmt der Compiler selbst den Typ der Variablen und ruft die statische Methode basierend auf ihrem Typ auf:
Code | Wie der Compiler es sieht |
---|---|
|
|
|
|
|
|
Kann für die Klasse aufgerufen werden
Sie können für eine Klasse nur eine statische Methode aufrufen. Um eine gewöhnliche Methode aufzurufen, benötigen Sie einen Verweis auf eine Instanz der Klasse. Daher können Sie mit diesem Konstrukt keine gewöhnliche Methode aufrufen:ClassName.methodName(arguments)
GO TO FULL VERSION