static in Java
Schreibe eine Klasse Tag in Tag.java mit einer static-Methode static void ping(), die ok druckt. In Yard.java rufe aus main Tag.ping(); auf und schreibe auf dieser Seite kein new Tag(). Kompiliere beide Dateien und starte java Yard. Der Bildschirm soll eine Zeile zeigen: ok. Die Methode gehört zum Klassennamen Tag, nicht zu einer Objektvariable. Der Aufruf über den Klassennamen ist der Lehrstoff dieser Seite.
Eine Methode am Klassennamen
Auf der Instanzmethoden-Seite hast du j.bump() nach new Jar(3) geschrieben. Dieser Aufruf brauchte ein Objekt. Eine static-Methode braucht keines. Du schreibst Tag.ping(); mit dem Klassennamen. Java führt diese Methode aus, ohne zuerst ein Tag-Objekt auf dieser Seite zu bauen.
Erstelle zuerst Tag.java. Die public-class-Zeile ist public class Tag. Lass keinen älteren Klassennamen Jar oder Tin hier. Innerhalb der geschweiften Klammern schreibe eine Methode:
static void ping() { System.out.println("ok"); }
Im ersten Demo gibt es kein Feld und keinen Konstruktor. In Tag.java gibt es kein main. Speichere vor dem Kompilieren. Das Wort static sitzt im Methodenkopf vor void. Ohne static passt ein späterer Aufruf Tag.ping(); aus Yard nicht zur Instanzmethoden-Form, die diese Seite will.
public class Tag {
static void ping() {
System.out.println("ok");
}
}
Yard ruft Tag.ping auf
Erstelle Yard.java im selben Ordner. Die public-class-Zeile ist public class Yard. Innerhalb von main schreibe einen Aufruf: Tag.ping();. Schreibe auf dieser Seite kein Tag t = new Tag();. Mach t.ping(); nicht zum Lehrpfad. Der Klassenname vor dem Punkt reicht.
Behalte Yard als die Klasse, die main hält. Lege main für diese Lektion nicht in Tag. Wenn eine übrig gebliebene Desk-Datei von der Instanzmethoden-Seite noch im Ordner liegt, starte für diese Lektion nicht java Desk — starte java Yard, nachdem du Tag.java und Yard.java kompiliert hast.
public class Yard {
public static void main(String[] args) {
Tag.ping();
}
}
Aus dem Ordner mit beiden Dateien führe javac Tag.java Yard.java aus. Du kannst Tag.java zuerst und Yard.java danach kompilieren, wenn beide fertig sind. Wenn Klammern, geschweifte Klammern und Semikolons passen, schreibt javac keine eigene Zeile. Dann starte java Yard — nicht java Yard.java und nicht java Tag. Lass die Endung .java beim Startbefehl weg. Starte die Klasse, die main hält. Dieselben Befehle funktionieren unter Windows und macOS.
Das Programm soll eine Zeile drucken und stoppen: ok. Es soll nicht auf Eingabe warten. Wenn das Terminal auf Tastatur wartet, steckt noch ein nextLine-Aufruf aus einer älteren Übung in einer Datei. Lösche ihn und behalte Tag.ping(); in Yard, mit static void ping in Tag.
Geh den Lauf einmal durch. Java startet bei Yard.main. Der Aufruf Tag.ping() findet die static-Methode auf der Klasse Tag und führt den Körper aus. Der Körper druckt ok. Es wurde kein Objekt gebaut. Der Bildschirm zeigt ok. Nichts anderes soll drucken. Wenn du 4 oder 5 siehst, läuft noch ein älteres Desk-Programm aus der bump-Lektion.
Wenn du ping(); ohne Tag. davor in Yard.main schreibst, lehnt javac in dieser Form ab. Die static-Methode braucht weiterhin ihren Klassennamen (oder einen sorgfältigen Import-Stil, den du noch nicht nutzt). Behalte Tag.ping();. Wenn du void ohne static setzt, ist Tag.ping(); die falsche Aufrufart für eine Instanzmethode — setze static zurück. Der Kopf muss wie static void ping() aussehen, nicht nur void ping(), und nicht static int ping() für dieses Druck-Demo.
Tag.ping und j.bump nebeneinander
Eine kurze Tabelle hält die zwei Aufrufformen klar.
📊 static vs instance call
| Aufruf | Braucht zuerst ein Objekt? |
|---|---|
Tag.ping(); |
nein — der Klassenname reicht |
j.bump(); |
ja — nach Jar j = new Jar(3); |
static void ping() |
Methode auf der Klasse |
void bump() |
Methode auf jedem Objekt |
Die Tabelle ist nur eine Erinnerung. Die getippte Zeile auf dieser Seite bleibt Tag.ping(); in Yard, mit static void ping() in Tag. |
Vergleich mit Instanzmethoden
Auf der Instanzmethoden-Seite hat j.bump() das fill eines Glases geändert. Das funktioniert weiterhin. Diese Seite ändert kein Feld. Sie druckt nur ok aus einer static-Methode, damit du den Aufruf über den Klassennamen siehst. Ein übrig gebliebenes Demo Jar j = new Jar(3); j.bump(); ist eine andere Lektion. Für diese Seite behalte Tag und Yard und Tag.ping();.
Du kannst an anderen Tagen weiterhin Objekte bauen. Diese Lektion wählt absichtlich den static-Pfad. Mische j.bump() und Tag.ping() nicht in demselben Yard-Demo auf dieser Seite. Ein klarer Pfad reicht: static auf der Methode, Klassenname vor dem Aufruf, Druck ok. Wenn du später beide Stile in einem Programm brauchst, halte jeden Aufruf ehrlich — Objekt vor Instanzmethoden, Klassenname vor static-Methoden —, damit Leser sehen, welche Art du meintest.
Du brauchst kein new Tag für diesen Aufruf
Weil ping static ist, alloziert Yard vor dem Aufruf kein Tag-Objekt. Tag t = new Tag(); und dann t.ping(); zu schreiben kann für eine static-Methode in vielen Setups kompilieren, aber das ist nicht die Form dieser Seite. Bleib bei Tag.ping(); allein. Wenn der Bildschirm 4 oder 5 zeigt, läuft noch ein älteres Desk-bump-Demo — wechsle zu java Yard.
Wenn javac sagt, dass das Symbol ping auf Tag fehlt, prüfe, dass der Methodenkopf static enthält und beide Dateien im selben Ordner liegen. Wenn java Tag läuft und nichts Nützliches tut, hast du die falsche Klasse gestartet — starte Yard, die main hält.
Was für access bleibt
Diese Seite nutzt eine public-Klasse und eine paket-sichtbare static-Methode im selben Ordner. Eine spätere Seite — access — zeigt Wörter wie public und private an Membern. Bleib hier beim static-Aufruf. Erfinde auf dieser Seite kein private static, außer du kennst es schon; das Lehrziel ist Tag.ping(); mit static void ping().
Wenn der Ordner noch Jar.java oder Desk.java hält, lass sie liegen oder lösche sie nur, wenn sie den Compile-Befehl verwirren. Starte java Yard, nachdem du das Tag-und-Yard-Paar aus dieser Lektion kompiliert hast.
Vor access
Du kannst in Tag static void ping() { System.out.println("ok"); } schreiben und aus Yard ohne Objekt Tag.ping(); aufrufen. Kompiliere beide Dateien und starte java Yard. Der Bildschirm zeigt ok. Die static-Methode lief am Klassennamen. Die nächste Seite ist access, wo du steuerst, welche Namen andere Klassen sehen dürfen.
Behalte static auf der Methode. Behalte den Klassennamen vor dem Aufruf. Behalte main in Yard. Diese drei Gewohnheiten sind der Kontrollpunkt dieser Seite, bevor du weitergehst.
🧠 Testen Sie Ihr Wissen
Testen Sie Ihr Wissen
Fordern Sie sich mit diesem interaktiven Quiz heraus und sehen Sie, wie gut Sie das Thema verstehen
📝 Anweisungen
- Lesen Sie jede Frage sorgfältig
- Wählen Sie die beste Antwort für jede Frage
- Sie können das Quiz so oft wiederholen, wie Sie möchten
- Ihr Fortschritt wird oben angezeigt