Lädt...

Instanzmethoden in Java

Schreibe eine Klasse Jar in Jar.java mit einem int-Feld fill, einem Konstruktor Jar(int n), der fill = n; setzt, und einer Instanzmethode void bump(), die fill = fill + 1; ausführt. In Desk.java baue ein Glas mit Jar j = new Jar(3);, rufe j.bump(); auf und drucke dann j.fill. Kompiliere beide Dateien und starte java Desk. Der Bildschirm soll eine Zeile zeigen: 4. Die Methode läuft auf diesem einen Objekt und ändert sein Feld. Eine Methode über die Objektvariable aufzurufen ist der Lehrstoff dieser Seite.

Eine Methode, die zum Objekt gehört

Auf den früheren Methodenseiten hast du einen Namen aus main ohne Objekt davor aufgerufen. Hier sitzt die Methode auf der Klasse, aber du erreichst sie über eine Jar-Variable: j.bump(). Dieser Aufruf nutzt die Felder des Glases, das j benennt. Ein zweites Glas behält sein eigenes fill.
Erstelle zuerst Jar.java. Die public-class-Zeile ist public class Jar. Lass keinen älteren Klassennamen Tin oder Box hier. Innerhalb der geschweiften Klammern deklariere int fill;. Schreibe den Konstruktor Jar(int n) { fill = n; } mit unterschiedlichen Namen, damit diese Seite kein this braucht. Schreibe dann die Instanzmethode:
void bump() { fill = fill + 1; }
In Jar.java gibt es kein main. Speichere vor dem Kompilieren. Der Methodenkopf braucht void, weil bump keinen Wert zum Drucken zurückgibt. Der Konstruktor hat weiterhin kein void — halte diesen Unterschied klar.

Jar with bump method

java
public class Jar {
    int fill;

    Jar(int n) {
        fill = n;
    }

    void bump() {
        fill = fill + 1;
    }
}

Desk baut ein Glas und ruft bump auf

Erstelle Desk.java im selben Ordner. Die public-class-Zeile ist public class Desk. Innerhalb von main schreibe drei Zeilen in dieser Reihenfolge: Jar j = new Jar(3);, dann j.bump();, dann System.out.println(j.fill);. Der Konstruktor speichert 3. Der Aufruf j.bump() addiert eins. Der Druck zeigt den neuen Wert.
Behalte Desk als die Klasse, die main hält. Lege main für diese Lektion nicht in Jar. Wenn eine übrig gebliebene Lab-Datei von der this-Seite noch im Ordner liegt, starte für diese Lektion nicht java Lab — starte java Desk, nachdem du Jar.java und Desk.java kompiliert hast.

Desk one bump

java
public class Desk {
    public static void main(String[] args) {
        Jar j = new Jar(3);
        j.bump();
        System.out.println(j.fill);
    }
}

Aus dem Ordner mit beiden Dateien führe javac Jar.java Desk.java aus. Du kannst Jar.java zuerst und Desk.java danach kompilieren, wenn beide fertig sind. Wenn Klammern, geschweifte Klammern und Semikolons passen, schreibt javac keine eigene Zeile. Dann starte java Desk — nicht java Desk.java und nicht java Jar. 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: 4. 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 new Jar(3), j.bump() und den Druck in Desk, mit bump in Jar.
Geh den Lauf einmal durch. Java startet bei Desk.main. Der Ausdruck new Jar(3) baut ein Glas und speichert 3 in fill. Der Aufruf j.bump() betritt bump auf demselben Objekt. Der Körper schreibt fill = fill + 1, sodass fill zu 4 wird. Dann druckt main j.fill und der Bildschirm zeigt 4.
Wenn du bump(); ohne j. davor schreibst, lehnt javac in dieser Form von main ab. Die Instanzmethode braucht ein Objekt. Wenn du Jar.bump(); schreibst, als wäre es ein static-Aufruf, ist das die Idee der nächsten Lektion — nicht dieser Seite. Behalte j.bump();.

Vergleich mit this und mit direkter Feldzuweisung

Auf der this-Seite hast du ein Feld im Konstruktor mit passenden Namen gespeichert. Das funktioniert weiterhin. Diese Seite fügt eine Methode hinzu, die du später aufrufen kannst, nachdem das Objekt schon existiert. Ein übrig gebliebenes Tin t = new Tin(7); mit this.size = size; ist eine andere Lektion. Für diese Seite behalte Jar und Desk und j.bump();.
Du könntest in main weiterhin j.fill = j.fill + 1; schreiben. Diese Lektion verlagert diese Änderung in bump, damit das Objekt die Aktion trägt. j allein mit System.out.println(j); zu drucken zeigt kein sauberes 4. Drucke j.fill, um die gespeicherte Zahl zu sehen.

Zwei bumps auf einem Glas

Du kannst j.bump(); zweimal aufrufen, bevor du druckst. Starte mit new Jar(3), bumpe einmal auf 4, bumpe erneut auf 5, dann drucke. Diese Prüfung passt in ein kleines zweites Desk-Demo.

Desk two bumps

java
public class Desk {
    public static void main(String[] args) {
        Jar j = new Jar(3);
        j.bump();
        j.bump();
        System.out.println(j.fill);
    }
}

Kompiliere und starte erneut: javac Jar.java Desk.java, dann java Desk. Der Bildschirm soll 5 zeigen. Jeder Aufruf von bump lief auf demselben Objekt und addierte eins mehr. Jar k = j; zu schreiben baut kein zweites Objekt — nutze zwei new Jar(...)-Aufrufe, wenn du zwei getrennte fills willst. Für diese Seite reichen zwei bumps auf einem Glas, um die Methode zweimal laufen zu sehen.
Wenn der Bildschirm noch 3 zeigt, fehlen vielleicht die bump-Aufrufe oder main druckt noch vor den Aufrufen. Wenn 7 oder eine andere Restzahl erscheint, steckt vielleicht noch ein älteres Tin-Demo in der Datei. Behalte new Jar(3) und die bump-Aufrufe.

Was für static übrig bleibt

Diese Seite ruft die Methode über ein Objekt auf: j.bump(). Eine spätere Seite — static — zeigt Methoden und Felder, die zum Klassennamen selbst gehören, ohne Objekt davor. Bleib hier beim Instanzaufruf. Erfinde auf dieser Seite kein static void bump(), es sei denn, du kennst es schon; das Lernziel ist der Aufruf auf dem Objekt.
Wenn javac beim Kompilieren von Desk.java Jar nicht findet, prüfe, dass Jar.java im selben Ordner liegt und die Klassenzeile public class Jar ist. Wenn der Bildschirm 0 zeigt, fehlt dem Konstruktor vielleicht die Speicherung, oder bump läuft nie — behalte Jar(int n) { fill = n; } und j.bump(); vor dem Druck.
Wenn der Ordner noch Tin.java oder Lab.java von der this-Seite hält, lass sie liegen oder lösche sie nur, wenn sie deinen Compile-Befehl verwirren. Starte java Desk, nachdem du das Jar- und Desk-Paar dieser Lektion kompiliert hast.

Vor static

Du kannst int fill; deklarieren, Jar(int n) { fill = n; } und void bump() { fill = fill + 1; } schreiben und aus Desk Jar j = new Jar(3);, j.bump(); und dann den Druck von j.fill ausführen. Kompiliere beide Dateien und starte java Desk. Der Bildschirm zeigt 4. Die Instanzmethode lief auf diesem Objekt und änderte sein Feld. Die nächste Seite ist static, wo manche Mitglieder zum Klassennamen gehören, ohne eine Objektvariable davor zu brauchen.
Behalte void auf der Methode, nicht auf dem Konstruktor. Behalte das Objekt vor dem Aufruf: j.bump();. Behalte den Druck auf j.fill. Diese drei Gewohnheiten sind der Checkpoint dieser Seite, bevor du weitergehst.

🧠 Testen Sie Ihr Wissen

Bereit zum Start

Testen Sie Ihr Wissen

Fordern Sie sich mit diesem interaktiven Quiz heraus und sehen Sie, wie gut Sie das Thema verstehen

❓
5
Fragen
🎯
70%
Zum Bestehen
♾️
∞
Zeit
🔄
∞
Versuche

📝 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