Warum wird in Java eine if-Anweisung ausgegeben, obwohl sie immer wahr ist? [Duplikat]

9

Die folgende Methode in Java wird korrekt kompiliert.

%Vor%

Die Methode hat einen expliziten Rückgabetyp, der java.lang.String ohne return -Anweisung ist, obwohl es gut kompiliert wird. Die folgende Methode kann jedoch nicht kompiliert werden.

%Vor%

Ein Kompilierungsfehler wird ausgegeben, der " fehlende return -Anweisung " anzeigt, obwohl die mit der if -Anweisung angegebene Bedingung immer wahr ist (sie hat eine boolean -Konstante, die niemals ist wird weder durch Reflexion verändert). Die Methode muss für ihre erfolgreiche Kompilierung wie folgt geändert werden.

%Vor%

oder

%Vor%

In Bezug auf den ersten Fall mit der while -Schleife scheint der zweite Fall legal zu sein, obwohl er nicht kompiliert werden kann.

Gibt es einen Grund im zweiten Fall jenseits einer der Funktionen des Compilers.

    
Tiny 20.10.2012, 17:28
quelle

2 Antworten

3
___ qstntxt ___

Die folgende Methode in Java wird korrekt kompiliert.

%Vor%

Die Methode hat einen expliziten Rückgabetyp, der %code% ohne %code% -Anweisung ist, obwohl es gut kompiliert wird. Die folgende Methode kann jedoch nicht kompiliert werden.

%Vor%

Ein Kompilierungsfehler wird ausgegeben, der " fehlende %code% -Anweisung " anzeigt, obwohl die mit der %code% -Anweisung angegebene Bedingung immer wahr ist (sie hat eine %code% -Konstante, die niemals ist wird weder durch Reflexion verändert). Die Methode muss für ihre erfolgreiche Kompilierung wie folgt geändert werden.

%Vor%

oder

%Vor%

In Bezug auf den ersten Fall mit der %code% -Schleife scheint der zweite Fall legal zu sein, obwohl er nicht kompiliert werden kann.

Gibt es einen Grund im zweiten Fall jenseits einer der Funktionen des Compilers.

    
___ answer12990983 ___

Aus dem Java-Tutorial: Sie können eine Endlosschleife mit der Anweisung while wie folgt implementieren:

%Vor%

Der Compiler weiß also, dass dies unendlich ist und daher nicht zurückgegeben werden kann - dh, dass er nicht unbedingt eine return-Anweisung benötigt.

Die %code% -Linie (für sich allein) kehrt dagegen zurück und muss daher alle zurückkehrenden Zweige abdecken.

    
___ antwort12990964 ___

Weil es ein toter Code ist. Die Analyse des toten Codes erfolgt in einem separaten Durchgang zur Analyse der Methodenrückgabe, die eine tiefer gehende Analyse durchführt, bei der die Verzweigungsbedingungen berücksichtigt werden.

    
___ tag123ifstatement ___ Eine "if" -Anweisung ist eine Kontrollstruktur in vielen Programmiersprachen, die den Ausführungsfluss abhängig von einer Bedingung ändert. ___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ qstnhdr ___ Warum wird in Java eine if-Anweisung ausgegeben, obwohl sie immer wahr ist? [Duplikat] ___ tag123loops ___ Schleifen sind eine Art von Kontrollfluss-Struktur in der Programmierung, in der eine Reihe von Anweisungen wiederholt ausgeführt werden kann, bis eine Bedingung erfüllt ist. ___
Ravindra Bagale 20.10.2012, 17:34
quelle
1

Aus dem Java-Tutorial: Sie können eine Endlosschleife mit der Anweisung while wie folgt implementieren:

%Vor%

Der Compiler weiß also, dass dies unendlich ist und daher nicht zurückgegeben werden kann - dh, dass er nicht unbedingt eine return-Anweisung benötigt.

Die if (true) -Linie (für sich allein) kehrt dagegen zurück und muss daher alle zurückkehrenden Zweige abdecken.

    
mcalex 20.10.2012 17:36
quelle

Tags und Links