Fehler bei der Kompilierung einer nicht erreichbaren Anweisung in Java [duplizieren]

8
%Vor%

Ich weiß, dass Zeile 1 / Zeile 2 niemals ausgeführt wird. Aber ich verstehe immer noch nicht, warum ein Kompilierzeitfehler ausgelöst wird. Ich erhalte "Unerreichbare Anweisung" Kompilierfehler.

Bedeutet dies, dass der Compiler prüft, ob er für alle Zweige / Codezeilen kompilieren kann?

    
UnderDog 19.08.2013, 07:06
quelle

6 Antworten

12
  

Bedeutet dies, dass der Compiler prüft, ob er in der Lage ist, für alle Zweige / Codezeilen zu kompilieren?

Dies bedeutet, dass der Compiler überprüft, ob jede Anweisung erreichbar ist.

Aus Abschnitt 14.21 der JLS :

  

Es ist ein Fehler bei der Kompilierung, wenn eine Anweisung nicht ausgeführt werden kann, weil sie nicht erreichbar ist.

     

Dieser Abschnitt ist einer genauen Erklärung des Wortes "erreichbar" gewidmet. Die Idee ist, dass es einen möglichen Ausführungspfad vom Anfang des Konstruktors, der Methode, des Instanzinitialisierers oder des statischen Initialisierers geben muss, der die Anweisung für die Anweisung selbst enthält. Die Analyse berücksichtigt die Struktur von Aussagen.

Der Abschnitt dokumentiert dann, wie Erreichbarkeit definiert ist.

Insbesondere sind die relevanten Punkte in Ihrem Fall:

  

Jede andere Anweisung S in einem nicht leeren Block, der kein Schaltblock ist, ist erreichbar, wenn die Anweisung, die S vorausgeht, normal abgeschlossen werden kann.

     

Eine break , continue , return oder throw Anweisung kann nicht normal beendet werden.

Der Anweisung "Zeile 1" geht also eine Anweisung voraus ( break; ), die nicht normal abgeschlossen werden kann und daher nicht erreichbar ist.

    
Jon Skeet 19.08.2013 07:08
quelle
5

Der Compiler kann diese Schlussfolgerung auch treffen und nimmt an, dass Sie einen Fehler machen. Und ja, der Java-Compiler macht eine ziemlich gute "Datenflussanalyse". Die häufigste verwandte Nachricht ist diejenige über nicht initialisierte Variablen. Die zweithäufigste ist, glaube ich, genau diese, über den Code nicht erreichbar.

    
Mario Rossi 19.08.2013 07:07
quelle
3
  

Bedeutet dies, dass der Compiler prüft, ob er kompilieren kann   alle Zweige / Zeilen des Codes?

Ja Der Compiler kompiliert den gesamten Code und erstellt einen Byte-Code entsprechend Ihrem Code, der klüger genug ist, um unreachable code auch dead code zu erkennen. Immediate break in for-loop macht andere Anweisungen unerreichbar.

%Vor%     
Subhrajyoti Majumder 19.08.2013 07:08
quelle
1

Der Compiler kann feststellen, dass diese beiden Anweisungen niemals ausgeführt werden, und hilft Ihnen, den richtigen Code zu schreiben, indem er sich weigert, ihn zu kompilieren, da dies eine Wahrscheinlichkeit von 99,9% darstellt und keine bewusste Entscheidung für das Hinzufügen von Anweisungen ist das wird nie ausgeführt werden.

    
JB Nizet 19.08.2013 07:09
quelle
1

Nicht erreichbarer Code ist bedeutungslos und redundant. Wenn Sie in Ihrem Programm nicht erreichbaren Code haben, ist das ein Fehler und muss behoben werden. Daher löst der Compiler einen Fehler aus.

Sie können sich auf ähnliche Fragen unten beziehen

Nicht erreichbarer Code: Fehler oder Warnung? und Warum hat Java einen Compilerfehler "nicht erreichbar"?

    
Aniket Thakur 19.08.2013 07:24
quelle
0

Der Compiler überprüft, ob nach bestimmten Schlüsselwörtern mehr Code vorhanden ist. Ein anderes Schlüsselwort, das eine ähnliche Nachricht verursacht, ist, wenn Sie break durch return ersetzen.

    
npinti 19.08.2013 07:08
quelle

Tags und Links