Warum muss ich nach einer Endlosschleife keinen Rückgabewert angeben? [Duplikat]

8

Antwort : Die erste Antwort dieses Threads beantwortet im Grunde meine Frage: Fehlende return-Anweisung in einer nicht void-Methode kompiliert .

Ich frage mich, warum ich in dieser private -Methode keinen Wert zurückgeben muss?

%Vor%

Ich denke, das sollte nicht kompiliert werden. Es kompiliert jedoch gut. Wo ist das als legal definiert?

In diesem Zusammenhang finde ich es komisch, die Methode zu ändern:

%Vor%

verlangt von mir, einen Rückgabetyp anzugeben, obwohl javap mir sagt, dass der Compiler für beide Implementierungen von testLoop genau den gleichen Bytecode erzeugt.

Wie und wann entscheidet der Java-Compiler, ob eine Methode tatsächlich einen Rückgabewert benötigt?

Leider wurde eine Antwort gelöscht, in der das Problem beim Anhalten erwähnt wurde. Ich denke, dass der Java-Compiler sich nicht mit Methoden zur Ablaufverfolgung beschäftigt, wie im obigen Beispiel, da er nicht alle möglichen Schleifen in einer allgemeinen Einstellung finden kann.

    
Rafael Winterhalter 13.11.2013, 11:29
quelle

5 Antworten

4
%Vor%

Die obige Methode kehrt nie zurück, da dort eine Endlosschleife ist. Es erwartet also keine Rückkehr oder es wird niemals zur Rückkehr kommen.

    
Ruchira Gayan Ranaweera 13.11.2013, 11:35
quelle
1

Die Methode

%Vor%

hat während der Kompilierung eigentlich keinen Rückkehrpunkt, was bedeutet, dass es bei der Kompilierung niemals eine Zeit gibt, in der nach einer Rückkehr gesucht wird.

Dies ist natürlich keine gute Übung und leere Zyklen, besonders solche mit true condition, sollten als Fehler in Ihrer IDE erscheinen.

    
Dropout 13.11.2013 11:39
quelle
1

Ihre while-Schleife while(true) { } wird niemals enden, so dass der Compiler keine return-Anweisung erwartet. Wenn der Compiler feststellt, dass die Schleife endet, erwartet er eine return-Anweisung. Sie können it.try mit int i=1;while(i<0) manuell testen. Dies wird Kompilierungsfehler geben und der Compiler wird Sie auffordern, eine Anweisung zurückzugeben

    
SpringLearner 13.11.2013 11:34
quelle
0

while (true) {} lässt keine weiteren Anweisungen zu, die Sie schreiben

%Vor%     
NGoyal 13.11.2013 11:38
quelle
-4

Sie rufen die Methode testloop auf und benötigen keinen Rückgabewert .... wenn Sie es so schreiben würden, müsste die private Methode etwas zurückgeben.

%Vor%     
DragonZero 13.11.2013 11:31
quelle

Tags und Links