Was macht das Schlüsselwort return in einer void-Methode in Java?

71

Ich schaue mir ein Tutorial zum Finden von Pfaden an und habe eine returnAnweisung in einer voidMethode (Klasse PathTest, Zeile 126) bemerkt :

if ((x < 0) || (y < 0) || (x >= map.getWidthInTiles()) || (y >= map.getHeightInTiles())) {
    return;
}

Ich bin ein Anfänger bei Java. Kann mir jemand sagen, warum es dort ist? Soweit ich wusste, returnist eine Methode der Leere nicht erlaubt.

Relequestual
quelle

Antworten:

134

An diesem Punkt wird die Methode nur beendet. Sobald returnausgeführt, wird der Rest des Codes nicht ausgeführt.

z.B.

public void test(int n) {
    if (n == 1) {
        return; 
    }
    else if (n == 2) {
        doStuff();
        return;
    }
    doOtherStuff();
}

Beachten Sie, dass der Compiler intelligent genug ist, um Ihnen mitzuteilen, dass Code nicht erreichbar ist:

if (n == 3) {
    return;
    youWillGetAnError(); //compiler error here
}
CookieOfFortune
quelle
6
Ich verstehe, dass Ihr Code illustrativ ist, aber zur Information der Eltern; Ich habe mit Leuten zusammengearbeitet, die glauben, dass jede Methode nur eine einzige return-Anweisung haben sollte. Ich bin keiner von ihnen, aber ich glaube daran, die Anzahl der Rückgaben so gering wie möglich zu halten, ohne den Code dabei hässlich zu machen.
Digitaljoel
3
Ja, es ist definitiv nicht zu viel zu verwenden, aber manchmal macht es es einfach viel einfacher und kann immer noch sehr gut lesbar sein.
CookieOfFortune
5
Meine Lieblingsmethode, um aus verschachtelten Schleifen
auszubrechen
2
Ohne Rückgabewert returnfunktioniert es sehr ähnlich wie breakin einer Schleife und beendet einfach den fraglichen Code. Es gab viele Flammenkriege um mehrere Austrittspunkte von Funktionen und einige Sprachen zwingen Sie auf die eine oder andere Weise. Ich nehme keine Position zu mehreren Austrittspunkten ein, aber ich werde darauf hinweisen, dass das Verlassen einer Funktion den lokalen Stapel bereinigt.
Michael Shopsin
27

Sie können returnin einer void-Methode haben, Sie können einfach keinen Wert zurückgeben (wie in return 5;), deshalb nennen sie es eine void- Methode. Einige Leute beenden void-Methoden immer explizit mit einer return-Anweisung, dies ist jedoch nicht obligatorisch. Es kann jedoch verwendet werden, um eine Funktion vorzeitig zu verlassen:

void someFunct(int arg)
{
    if (arg == 0)
    {
        //Leave because this is a bad value
        return;
    }
    //Otherwise, do something
}
Pesto
quelle
20

Das Schlüsselwort fügt einfach einen Frame aus dem Aufrufstapel ein und gibt das Steuerelement an die Zeile zurück, die dem Funktionsaufruf folgt.

MahdeTo
quelle
9
Haha. Dies ist eine großartige Antwort, aber ich bezweifle, dass Anfänger in Java wirklich verstehen würden, was Sie sagen wollen.
Franklin
@ElliotMok Fair genug. Wir fangen alle als Anfänger an!
Franklin
13

Die Sprache Java - Spezifikation sagt , dass Sie Rückkehr ohne Ausdruck haben kann , wenn Ihre Methode void zurückgibt.

John Ellinwood
quelle
3

Es verlässt die Funktion und gibt nichts zurück.

So etwas return 1;wäre falsch, da es die Ganzzahl 1 zurückgibt.

Albert
quelle
2

Es funktioniert genauso wie eine Rückgabe für eine Funktion mit einem angegebenen Parameter, außer dass nichts zurückgegeben wird, da nichts zurückgegeben werden muss und die Steuerung an die aufrufende Methode zurückgegeben wird.

Chris Ballance
quelle
1

In diesem Beispiel möchten Sie der Liste unter bestimmten Bedingungen hinzufügen. Ohne das Wort "return" werden alle ifs ausgeführt und zur ArrayList hinzugefügt!

    Arraylist<String> list =  new ArrayList<>();

    public void addingToTheList() {

    if(isSunday()) {
        list.add("Pray today")
        return;
    }

    if(isMonday()) {
        list.add("Work today"
        return;
    }

    if(isTuesday()) {
        list.add("Tr today")
        return;
    }
}
iali87
quelle
Die ArrayList sollte wie folgt initialisiert worden sein: ArrayList <String> list = new ArrayList <> ();
The_Martian