Gibt es eine goto-Anweisung in Java?
Ich bin verwirrt darüber. Die meisten von uns gesagt worden, dass es keine goto-Anweisung in Java.
Aber ich fand, dass es eines der Schlüsselwörter in Java. Wo kann es eingesetzt werden? Wenn es nicht benutzt werden kann, warum wurde er dann aufgenommen in Java als Schlüsselwort?
nur ein Wort der Beratung: nie goto verwenden
Und dann gibt es noch "'Go To Statement considered harmful' considered harmful", und "'"Go To Statement considered harmful" considered harmful' considered harmful?" SEEEEEHR rekursive, dieses meme.
'gehe zu' - ist stets das böse - wie in 'goto' die Arbeit' oder 'goto' Schule 😉
Der wahre Grund ist, dass die "g** * o" - Wort überlegen, obszön in den meisten Programmiersprachen. Die Java-Designer sind nur zum Schutz unschuldiger junger Programmierer aus korrumpierenden Einflüssen. ( 🙂 )
Die Hexenjagd gegen goto hervorgebracht hat einige der gravierendsten Momente in meinem Leben. Ich habe Menschen gesehen, die verdrehen C-code, der durch das verstecken von Funktionen in Funktionen, setzen Sie absurd exit logic in multi-nested loops, und auch sonst jede form von over-engineering denkbar EINFACH zu vermeiden, jemanden zu kritisieren, Ihren code in eine code-review. Diese Regel, zusammen mit der "du sollst nicht mehrere gibt" canard, durchdrungen ist Unsinn. Es gibt Zeiten, wenn goto macht die Dinge weniger wartbar zu sein. Es gibt Zeiten, wenn goto macht die Dinge besser zu warten. Ich hoffte so sehr, diese Hexenjagd wäre gestorben in der 80.
Und dann gibt es noch "'Go To Statement considered harmful' considered harmful", und "'"Go To Statement considered harmful" considered harmful' considered harmful?" SEEEEEHR rekursive, dieses meme.
'gehe zu' - ist stets das böse - wie in 'goto' die Arbeit' oder 'goto' Schule 😉
Der wahre Grund ist, dass die "g** * o" - Wort überlegen, obszön in den meisten Programmiersprachen. Die Java-Designer sind nur zum Schutz unschuldiger junger Programmierer aus korrumpierenden Einflüssen. ( 🙂 )
Die Hexenjagd gegen goto hervorgebracht hat einige der gravierendsten Momente in meinem Leben. Ich habe Menschen gesehen, die verdrehen C-code, der durch das verstecken von Funktionen in Funktionen, setzen Sie absurd exit logic in multi-nested loops, und auch sonst jede form von over-engineering denkbar EINFACH zu vermeiden, jemanden zu kritisieren, Ihren code in eine code-review. Diese Regel, zusammen mit der "du sollst nicht mehrere gibt" canard, durchdrungen ist Unsinn. Es gibt Zeiten, wenn goto macht die Dinge weniger wartbar zu sein. Es gibt Zeiten, wenn goto macht die Dinge besser zu warten. Ich hoffte so sehr, diese Hexenjagd wäre gestorben in der 80.
InformationsquelleAutor Venkat | 2010-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Java-keyword-Liste gibt die
goto
keyword, aber es ist markiert als "nicht verwendet".Es wurde in der original-JVM (siehe Antwort von @VitaliiFedorenko), aber dann entfernt. Es war wahrscheinlich gehalten als ein reserviertes Schlüsselwort in Fall waren Hinzugefügt werden, auf eine neuere version von Java.
Wenn
goto
war nicht auf der Liste, und es wird Hinzugefügt, um die Sprache später auf, bestehenden code, der verwendet das Wortgoto
als Bezeichner (Variablennamen, Methodennamen, etc...) brechen würde. Aber dagoto
ist ein Schlüsselwort, einen solchen code nicht selbst kompilieren, in der Gegenwart, und es bleibt möglich zu machen, tatsächlich etwas später auf, ohne dabei vorhandenen code.This was probably done in case it were to be added to a later version of Java.
Eigentlich der Hauptgrund ist ein bisschen anders (siehe meine Antwort unten)Das ist eine gute und interessante Informationen, aber es erklärt nicht, warum es immer noch ein reserviertes Schlüsselwort.
Hast du nicht beschreiben, warum es vorbehalten? Es ist ein Schlüsselwort, so kann es nicht verwendet werden, jetzt; später springen konnte Feder zu Leben, ohne die Probleme verursacht. Wenn es nicht ein reserviertes Wort, konnte es nun verwendet werden, um zu produzieren-code (int springen = 2;) das würde brechen, wenn Sie springen vorgestellt wurde.
InformationsquelleAutor Thomas
James Gosling erstellt die original JVM mit Unterstützung von
goto
Aussagen, aber dann entfernte er sich dieses feature als unnötig. Der Hauptgrundgoto
unnötig ist, ist, dass in der Regel es kann ersetzt werden mit mehr lesbar Aussagen (wiebreak/continue
) oder durch Extraktion ein Stück code in eine Methode.Quelle: James Gosling, Q&A session
Manchmal, eine sinnvolle Nutzung
goto
ist die meisten readyble und klaren Art und Weise, um etwas auszudrücken, so zwingt es in etwas anderes ist perforce weniger lesbar.Die Verwendung von goto, besonnen, wie es sein kann, ist immer anfällig für Fehler.
Die einzige Verwendung von goto gilt, dass gute Praxis in C++ wird unterstützt durch die Pause/weiter.
Goto wird ein reserviertes Schlüsselwort in Java ist großartig, weil es verhindert, dass Menschen aus der Benennung Etiketten "gehe zu:".
InformationsquelleAutor Vitalii Fedorenko
Dem Schlüsselwort vorhanden ist, aber es ist nicht implementiert.
Der einzige gute Grund für die Verwendung von goto, ich kann mir denken, ist dies:
In Java können Sie das in etwa so machen:
Naja, nicht ganz. Das-label Etiketten der äußeren Schleife. Dann
break loops
bedeutet "break aus der Schleife heraus aufgerufenloops
". Vielleicht im Nachhinein ein besserer name für das label hätteouter
.Dies ist bei weitem die beste Antwort, meiner Meinung nach.
"Der einzige gute Grund für die Verwendung von goto" Schnell und schmutzig kleine Programme, die eine bedingungslose Endlosschleife machen große Verwendung von goto. Mit
while (true) {
...}
ist übertrieben. GOTO ist Häufig stigmatisiert für seine unsachgemäße Verwendung, aber ich argumentieren, dass unnötige Vergleiche, Boolesche Literale ist schlimmer als SPRINGEN.Vor kurzem habe ich entdeckt, dass diese Kennzeichnung Technik ist auch sehr nützlich in Kombination mit einem
continue LABEL;
- Anweisung. So können Sie weiterhin einen außen liegenden Schleife.InformationsquelleAutor jonnystoten
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
Macht Sinn, da alle primitiven Typen in Java sind unterzeichnet.
Nicht alle. "char" ist ein primitiver Typ und es ist nicht signiert.
InformationsquelleAutor Isaac E
So konnte Sie einen Tag, wenn die Sprache, die Designer fühlte die Notwendigkeit.
Auch, wenn die Programmierer von Sprachen, in denen diese keywords (zB. C, C++) verwenden, die Ihnen durch Fehler, dann der Java-compiler kann eine sinnvolle Fehlermeldung.
Oder vielleicht war es nur zu stoppen Programmierer mit springen 🙂
Die fehlende goto-Funktionalität in Java-sollte Grund genug sein, Sie nicht zu verwenden, springen - es gibt keine Notwendigkeit, um es zu behalten als ein Schlagwort. Folgt man der Logik, dann wäre alles ein Schlüsselwort, da es entweder von anderen Sprachen und/oder der Java-Designer, KÖNNTE es in der Zukunft verwenden...
Ich glaube nicht, dass meine Logik sagt alles wäre ein Stichwort. Es gibt eine kleine Gruppe von Schlüsselwörtern im Einsatz über viele Programmiersprachen, dass man sinnvollerweise erkannt und behandelt werden, in Java. Java reserviert
goto
undconst
was seine C/C++ - Erbe, aber Sie bleiben nicht angewendet (obwohl es Debatten über die Umsetzung der letzteren). Ein paar mehr wieassert
undenum
waren zunächst nicht reserviert, aber vielleicht sollte man gewesen sein, da Sie umgesetzt wurden. Aber im Nachhinein ist eine wunderbare Sache.FYI: Zusammengeführt aus stackoverflow.com/questions/1334376/goto-keyword-in-java
InformationsquelleAutor dave
Sind Sie für zukünftige Verwendung reserviert (siehe: Schlüsselwörter Der Programmiersprache Java)
Den Grund warum es gibt keine goto-Anweisung in Java finden Sie in "Die Java Language Environment":
goto
ist zurückhaltend, aber nicht für die zukünftige Verwendung.Wir hoffen,. 🙂
InformationsquelleAutor Heinzi
Ein Beispiel, wie Sie mit "weiter" - labels in Java ist:
Ergebnisse:
InformationsquelleAutor andrew
Ist es wichtig zu verstehen, dass die
goto
Konstrukt ist überbleibsel aus den Tagen, die der Programmierer programmiert in Maschinensprache und Assembler. Denn diese Sprachen sind so einfach (wie in jedem Unterricht nicht nur ein Sache), Programm-Ablaufsteuerung erfolgt komplett mitgoto
Aussagen (aber in Assembler-Sprache, diese sind bezeichnet als springen oder ast - Anweisungen).Nun, obwohl die C-Sprache ist ziemlich low-level, es kann gedacht werden als sehr high-level-Assembler - each-Anweisung und die Funktion in C kann leicht zerbrochen werden, in Assembler-Anweisungen. Obwohl C ist nicht das vorrangige Sprache, Computer zu Programmieren mit heute, es ist immer noch stark in low-level-Anwendungen wie eingebettete Systeme. Weil die C-Funktion, so eng die Spiegel-assembly-Sprache - Funktion, macht es nur Sinn, dass
goto
ist enthalten in C.Es ist klar, dass Java eine Weiterentwicklung von C/C++. Java teilt viele der Eigenschaften von C, aber abstrahiert eine Menge mehr details, und daher ist es einfach anders geschrieben. Java ist eine sehr high-level-Sprache, so ist es einfach nicht nötig zu haben, low-level-Funktionen wie
goto
wenn mehr high-level-Konstrukte wie Funktionen, für, für jeden, und while-Schleifen machen das Programm der Ablaufsteuerung. Stellen Sie, wenn Sie wurden in eine Funktion und hat einegoto
auf ein Etikett in einer anderen Funktion. Was würde passieren, wenn die andere Funktion zurückgegeben? Diese Idee ist absurd.Diese nicht unbedingt beantworten, warum Java enthält die
goto
Aussage noch nicht lassen Sie es kompilieren, aber es ist wichtig zu wissen, warumgoto
war jemals in den ersten Platz, in den unteren level-Anwendungen, und warum es nicht nur sinnvoll verwendet werden, in Java.Springen mit "springen" von einer Funktion zu einem label in einer anderen Funktion ist auch nicht möglich, in C/C++. Goto in C/C++ beschränkt sich auf eine einzelne Funktion zu blockieren.
"es ist einfach nicht nötig zu haben, low-level-Funktionen wie goto, wenn mehrere high-level-Konstrukte" - erinnern Sie sich "Notwendigkeit und Hinlänglichkeit". Es ist nur "nicht notwendig". Und so ohne Grund. Was IST ein Grund: "Springen" wie ein "high level" - Ersatz für Assembler die JMPs, BNEs und mehr zumutbar ist, wenn Sie wollen, springen Sie zu "ausführbaren code", aber Java ist der bytecode und somit auch nicht "executable". 😉
InformationsquelleAutor Michael P at NCSU
Nein,
goto
wird nicht verwendet, aber Sie können definieren, Etiketten und lassen Sie eine Schleife, die bis zu dem Etikett. Sie könnenbreak
odercontinue
gefolgt von der Bezeichnung. So können Sie direkt aus mehr als einem loop-Ebene. Haben Sie einen Blick auf das tutorial.InformationsquelleAutor Arne Burmeister
Nein, zum Glück, es ist nicht
goto
in Java.Den
goto
Schlüsselwort ist nur reserviert, aber nicht verwendet wird (das gleiche gilt fürconst
).Kumar : siehe @applechewer Antwort, es existiert, aber es ist nicht implementiert.
Kumar: Reservierte Schlüsselwörter aus, dass Sie als Variablennamen verwendet oder ähnliches. Diese Schlüsselwörter können in Zukunft umgesetzt werden Versionen von Java, ohne zu brechen alte source-code, könnte anderweitig verwendet werden.
InformationsquelleAutor Bozho
Da es nicht unterstützt wird und warum wollen Sie ein
goto
Schlüsselwort, das nichts Tat, oder eine variable namensgoto
?Obwohl Sie verwenden können
break label;
undcontinue label;
Anweisungen, um effektiv zu tun, wasgoto
tut. Aber ich würde nicht empfehlen es.Weil es einen Sinn hat, in das land der Programmierung, die ist nicht für Java. Es ist auch eine schlechte Wahl des Variablennamens.
dann weiss über Wörter wie drucken, Lesen , etc?
-1: Erstens, nur weil Java nicht unterstützt "goto" flow control-Anweisung, bedeutet das nicht, dass ist der Grund, es hat die "goto" - Schlüsselwort, das nicht tun. Zweite, "goto" könnte ein schlechter Variablenname, aber es kann eine hervorragende Methode, mit Namen, die wir nicht verwenden können, da "goto" ist ein Schlüsselwort. Dritte, "break label" und "continue label" existieren für einen sehr guten Grund, dies "nicht zu empfehlen" es ist nicht sehr nützlich. Und viertens, da die Sonne sagt, es ist "derzeit nicht verwendet", es bedeutet höchstwahrscheinlich, dass Sie nach der Planung zu implementieren , aber nicht wollen, um loszuwerden, das Schlüsselwort, wenn Sie anders entschieden.
Das ist einfach verrückt zu sprechen. 1) , ist warum tut es nichts, weil es nicht unterstützt wird. Nach der JLS
The keywords const and goto are reserved, even though they are not currently used. This may allow a Java compiler to produce better error messages if these C++ keywords incorrectly appear in programs.
Dies bedeutet, dass "Wir es nicht verwenden werden, so dass, wenn Sie kommen aus einem C++ - hintergrund-sind wir nicht gehen zu lassen, Sie benutzen es überhaupt.". 2)goto
ist eine schreckliche Methode name. Sorry. 3) Pause und weiter empfohlen, aber nicht in der Weise verwendet hier. 4) "Wahrscheinlichkeit" [citation needed].InformationsquelleAutor pjp
Nein,
goto
ist nicht in Java, obwohl Sie ein reserviertes Wort ist. Das gleiche gilt fürconst
. Beide sind in C++, das ist wahrscheinlich der Grund, warum Sie reserviert sind; die Absicht war wohl nicht zu verwirren C++ - Programmierer die Migration zu Java, und vielleicht auch weiterhin die Möglichkeit, mit Ihnen in späteren Versionen von Java.goto
wird nicht unterstützt, in Naher Zukunft zumindest 😉gut, es könnte verwendet werden, für einige geniale neue feature, dass absolut nichts zu tun hat mit der schlechten alten "schädlich" springen.
Ich würde wirklich gerne
goto
.InformationsquelleAutor Michael Borgwardt
Als darauf hingewiesen wurde, es gibt keine
goto
in Java, aber das Stichwort war reserviert für den Fall, Sonne war wie das hinzufügengoto
Java eines Tages. Sie wollte in der Lage sein, um Sie hinzuzufügen, ohne zu brechen zu viel code, so dass Sie sich vorbehalten das Stichwort. Beachten Sie, dass mit Java 5-Sie fügten hinzu, dieenum
Stichwort und es nicht zu brechen, dass viel code.Obwohl Java hat keine
goto
, hat es einige Konstrukte, die entsprechen einige Verwendungen vongoto
nämlich könnenbreak
undcontinue
mit benannten Schleifen. Auchfinally
gedacht werden kann, als eine Art von twistedgoto
.InformationsquelleAutor Thomas Pornin
Verbieten Deklarationen von Variablen mit dem gleichen Namen.
z.B.
int i = 0, goto;
FYI: Zusammengeführt aus stackoverflow.com/questions/1334376/goto-keyword-in-java
InformationsquelleAutor Karl
Es ist sehr viel als eines jener Dinge, die Sie Nicht Tun, aber war wohl aufgeführt wie ein reserviertes Wort, um Verwirrung zu vermeiden für Entwickler.
InformationsquelleAutor Dean J
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.goto
Wenn Euch gesagt wurde, dass es keine goto-Anweisung in Java-Sie wurden getäuscht. In der Tat, Java besteht aus zwei Schichten von 'source' - Codes.
Java" kann auch interpretiert werden als "Java-Plattform". Java-compiler benötigt Java-bytecode oder Ausgang funktioniert nicht im Java-Plattform-JVM. C++ zum Beispiel nicht angeben, die Zusammenstellung der Ausgabe und der compiler ist frei, zu produzieren irgendeine form von Computer-code (oder anderen code). Java-bytecode programmiert Anwendung kann als "Java-Anwendung"), aber Maschinencode programmierte Anwendung kann nicht aufgerufen werden "C++ - Anwendung".
Ich weiß genau, was java-bytecode ist. Ich war die erste Programmierung in java im Jahr 1996. Und Sie können auch andere Sprachen generieren von java-bytecode für die JVM. Wo ich mich korrigieren, Sie ist diese Idee, dass es zwei Ebenen von der Quelle. Gibt es nicht. Sie haben java-Quellcode und kompiliert zu java-byte-code (ausgeführt durch die JVM) und das ist nicht eine zusätzliche Quelle. Nur weil es ein "goto" in der byte-code bedeutet nicht, dass es ein "goto" in java. Java genannt hat, bricht und Namen geht weiter, aber nicht springen.
Ich wurde geweckt durch ein downvote 🙂 Es kann leicht so scheinen, verlor ich das argument, da man aus dem letzten Kommentar und Ihre Anmeldeinformationen sind beeindruckend. Mein Punkt, die ich baute, bis, war, dass es sehr gut möglich, das Programm mit Java-bytecode. Versichern Sie sich, hier gibt ' s noch eine Frage: stackoverflow.com/questions/3150254/...
InformationsquelleAutor Mikael Lindlöf
Beachten Sie, dass Sie können ersetzen die meisten der gutartigen verwendet von goto durch
zurück
Pause
Pause label
werfen im inneren try-catch-finally -
Ausnahmen verwendet für flow-control, aber sollte verwendet werden, nur in Ausnahmefällen. Zum Beispiel für eine Verwendung von goto in C ist Fehler-handling, vor allem, wenn es sich um die Reinigung.
Sie nahm die Worte aus meinem Mund. Eine Ausnahme ist Ablaufsteuerung. In C, in der Tat, können Sie etwas sauber implementieren der Ausnahmebehandlung über setjmp/longjmp, indem Sie sicher, dass Sie zuerst setjmp den Umgang mit code und Ausführung von longjmp()ing, um es auf Ausnahme.
Sie könnten versuchen
return
Dann sollten Sie strukturieren Sie Ihre code.
InformationsquelleAutor starblue
Unter folgendem link zu finden ist, zeigt alle java reservierte Wörter und sagt Ihnen, welche Versionen Sie Hinzugefügt.
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
goto ist reserviert, obwohl es ist nicht zurzeit verwendet, niemals nie sagen aber 🙂
InformationsquelleAutor Paul Whelan
Ich bin kein fan von
goto
entweder, wie es in der Regel macht den code weniger lesbar. Aber ich glaube, dass es Ausnahmen zu dieser Regel (vor allem, wenn es um lexers und Parser!)Natürlich kann man immer bringen Sie Ihr Programm in Kleene Normalform durch die übersetzung es zu etwas assembler-ähnliche und dann so etwas schreiben
(Also im Grunde schreiben Sie eine VM, führt Ihre binären code... wo
line
entspricht der instruction pointer)Ist so viel besser lesbar als code, der verwendet
goto
, ist es nicht?InformationsquelleAutor Viktor Engelmann
Denn obwohl die Sprache Java nicht, der JVM-bytecode tut.
load
keyword?mit einem goto in bytecode nicht durch sich selbst bedeuten, nichts für die Obere Ebene reservierte Wörter.
InformationsquelleAutor gribnit
Natürlich ist es als Schlagwort, aber es ist nicht verwendet auf Ebene des Quellcodes.
Aber wenn Sie jasmin oder andere Low-level-Sprache, die umgewandelt wird zu bytecode, dann "goto" gibt es
InformationsquelleAutor user1722245
springen ist nicht in Java
verwenden Sie SPRINGEN
Aber es funktionieren nicht richtig.in wichtigen java-Wort, es wird nicht verwendet.
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
InformationsquelleAutor m-tech