Rückgabewerte in Java
Schreibe eine Methode namens twice, die ein int namens n nimmt und das Doppelte dieser Zahl zurückgibt. Der Kopf beginnt mit int, nicht mit void: static int twice(int n). Innerhalb der geschweiften Klammern schreibe return n * 2;. In main drucke das Ergebnis des Aufrufs: System.out.println(twice(7));. Der Bildschirm soll eine Zeile zeigen: 14. twice selbst ruft println nicht auf. Es gibt nur 14 zurück. main druckt diese Zahl. Genau dieses Zurückgeben lehrt diese Seite.
Gib eine Zahl an main zurück
Auf der parameters-Seite haben greet und show innerhalb des Methodenkörpers gedruckt. Der Aufruf schickte einen Wert hinein, und die Methode schrieb auf den Bildschirm. Hier empfängt die Methode weiterhin einen Wert, schickt aber auch einen Wert hinaus. Das Wort return markiert diesen ausgehenden Wert. main kann ihn speichern oder drucken.
Lege eine kleine Programmdatei namens Box.java an. Die public class in der ersten Zeile muss zum Dateinamen passen: public class Box. Lass keinen älteren Tip- oder Chime-Klassennamen in dieser Datei; der Compiler erwartet, dass Klassenname und Dateiname übereinstimmen.
Außerhalb von main, aber noch innerhalb der Klassenklammern, schreibe:
static int twice(int n) {
return n * 2;
}
Der Kopf sagt nicht mehr void. Er sagt int, weil der zurückkommende Wert ein int ist. Zwischen den runden Klammern ist int n weiterhin ein Parameter — dieselbe Idee wie auf der letzten Seite. Der Körper hat eine Anweisung: return n * 2;. Das multipliziert n mit 2 und schickt das Produkt an den Aufrufer von twice. Es gibt kein System.out.println innerhalb von twice auf dieser Seite. Speichere die Datei vor dem Kompilieren.
Box.java mit twice
Das ist das vollständige kleine Programm. twice rechnet. main druckt.
public class Box {
public static void main(String[] args) {
System.out.println(twice(7));
}
static int twice(int n) {
return n * 2;
}
}
Aus dem Ordner, der Box.java enthält, führe javac Box.java aus. Wenn runde und geschweifte Klammern sowie Semikolons passen, schreibt javac keine eigene Zeile. Dann führe java Box aus — nicht java Box.java. Lass die Endung .java beim zweiten Befehl weg. Dieselben zwei Befehle funktionieren unter Windows und unter macOS; diese Seite braucht keine andere Shell-Schreibweise für keines der Systeme. Das Programm soll eine Zeile drucken und stoppen: 14. Es soll dich nicht zum Tippen auffordern. Wenn das Terminal auf Tastatureingabe wartet, steckt noch ein nextLine-Aufruf aus einer älteren Übung in der Datei. Lösche diesen Aufruf und behalte System.out.println(twice(7)); plus die twice-Methode oben. Eine falsche Bildschirmzeile bedeutet nicht, dass du Java neu installieren musst.
Geh den Lauf einmal der Reihe nach durch. Java startet bei main. Der Aufruf twice(7) schickt 7 in n. Innerhalb von twice berechnet return n * 2; die 14 und gibt diese 14 an main zurück. Dann schreibt println die 14. twice hat selbst nichts auf den Bildschirm geschrieben. Wenn du den Aufruf auf twice(3) änderst, soll der Bildschirm 6 zeigen. Der Methodenkörper bleibt gleich; nur das Argument ändert sich, und das zurückgegebene Produkt ändert sich mit. Wenn der Bildschirm 7 statt 14 zeigt, hast du n innerhalb von twice gedruckt oder das Argument in main ohne Aufruf von twice gedruckt — lege die Verdopplung auf die return-Zeile und drucke das Ergebnis des Aufrufs.
Du kannst den zurückgegebenen Wert auch zuerst in main unter einem Namen speichern und dann drucken:
int result = twice(7);
System.out.println(result);
Das zeigt ebenfalls eine Zeile: 14. Zuerst endet der Aufruf und füllt result. Dann schreibt println result. Beide Formen — den Aufruf direkt drucken oder speichern und dann drucken — nutzen dasselbe return aus twice.
Drucke den Wert, den main erhalten hat
Ändere nur die Zahl im Aufruf, wenn du eine andere Bildschirmzeile willst. Lass return n * 2; unverändert. Kompiliere und starte nach jeder Änderung erneut: javac Box.java, dann java Box. twice(0) soll 0 drucken. twice(10) soll 20 drucken. Jedes Mal druckt main, was twice zurückgegeben hat.
Wenn twice im Kopf noch void sagt, der Körper aber return n * 2; hat, schreibt javac einen Fehler — void bedeutet, dass nichts zurückkommt, also passt ein return mit Wert nicht. Wenn der Kopf int sagt, der Körper aber kein return hat, schreibt javac ebenfalls einen Fehler — eine int-Methode muss in dieser Anfängerform auf jedem Pfad ein int zurückgeben. Wenn der Körper druckt und nie zurückgibt, bist du wieder bei der Idee der Tip-Seite; diese Seite will die Zahl in den Händen von main.
void gegenüber einer typisierten Rückgabe
Lies die beiden Formen nebeneinander. Eine void-Methode führt ihren Körper aus und endet. Eine Methode mit typisierter Rückgabe muss mit return einen Wert zurückgeben. Wenn der Rückgabetyp nicht void ist, behandelt main den Aufruf als diesen Wert.
📊 void-Körper gegenüber return
| Form | Was die Methode tut | Was main oft tut |
|---|---|---|
| void show(int n) | druckt im Körper | ruft show(9); auf und druckt vielleicht nichts weiter |
| int twice(int n) | return n * 2; | druckt oder speichert twice(7) |
Ein häufiger Mix-up ist System.out.println(n * 2); in twice zu schreiben und den Kopf als int ohne return zu lassen. Dann meckert javac, oder du setzt den Kopf wieder auf void und hast keinen Wert mehr, den main aus dem Aufruf drucken kann. Ein anderer Mix-up ist return; ohne Wert, während der Kopf int sagt. Behalte return n * 2;, damit der Typ des zurückgegebenen Ausdrucks zu int passt. System.out.println("twice"); in main druckt das Wort twice; es ruft die Methode nicht auf. Behalte println(twice(7)), wenn du 14 auf dem Bildschirm willst.
Eine übrig gebliebene Tip-greet-Demo, die nur hi lena innerhalb der Methode druckt, kann in derselben Datei liegen und den Bildschirm verwirren. Räume main auf die println-Zeile, die twice nutzt, und behalte eine Methode, die zurückgibt. Verschachtle twice nicht in den Klammern von main. Methoden sitzen in der Klasse, neben main. Schließe die Klammern von twice, bevor die Klasse endet.
Vor overloading
Du kannst static int twice(int n) schreiben, einen berechneten Wert zurückgeben und diesen Wert aus main drucken. Der Bildschirm zeigt die Zahl, die main erhalten hat, nicht eine Zeile, die die Methode selbst gedruckt hat. void ist der falsche Kopf, wenn du einen Wert zurückbrauchst. Die nächste Seite ist overloading, wo mehr als eine Methode denselben Namen teilen können, wenn sich ihre Parameterlisten unterscheiden.
🧠 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