Estou confuso sobre isso. Muitos de nós já foram informados de que não existe nenhuma declaração goto em Java.
Mas descobri que é uma das palavras-chave em Java. Onde isso pode ser usado? Se não pode ser usado, por que foi incluído no Java como uma palavra-chave?
Respostas:
A lista de palavras-chave Java especifica a
goto
palavra - chave, mas está marcada como "não usada".Ele estava na JVM original (veja a resposta por @VitaliiFedorenko ), mas foi removido. Provavelmente foi mantida como uma palavra-chave reservada, caso fosse adicionada a uma versão posterior do Java.
Se
goto
não estivesse na lista e depois fosse adicionado ao idioma, o código existente que usava a palavragoto
como identificador (nome da variável, nome do método, etc ...) seria interrompido. Mas, comogoto
é uma palavra-chave, esse código nem será compilado no presente, e ainda é possível fazê-lo realmente fazer algo mais tarde, sem quebrar o código existente.fonte
This was probably done in case it were to be added to a later version of Java.
Na verdade, a principal razão é um pouco diferente (veja minha resposta abaixo) #James Gosling criou a JVM original com suporte a
goto
instruções, mas depois removeu esse recurso como desnecessário. O principal motivogoto
é desnecessário: geralmente, ele pode ser substituído por instruções mais legíveis (comobreak/continue
) ou pela extração de um pedaço de código em um método.Fonte: James Gosling, sessão de perguntas e respostas
fonte
goto
é a maneira mais fácil e clara de expressar algo; portanto, forçá-lo a qualquer outra coisa é menos legível .A palavra-chave existe, mas não está implementada.
A única boa razão para usar o goto em que consigo pensar é:
Em Java, você pode fazer o seguinte:
fonte
break loops
significa "sair do loop chamadoloops
". Talvez, em retrospecto, um nome melhor para o rótulo possa ter sidoouter
.while (true) {
...}
é um exagero. O GOTO é frequentemente estigmatizado por seus usos impróprios, mas eu argumento que comparações desnecessárias com literais booleanos são piores que o GOTO.continue LABEL;
declaração. Assim, você pode continuar um loop externo.http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
fonte
Então eles poderiam ser usados um dia se os designers de idiomas sentissem a necessidade.
Além disso, se programadores de linguagens que possuem essas palavras-chave (por exemplo, C, C ++) as usam por engano, o compilador Java pode fornecer uma mensagem de erro útil.
Ou talvez fosse apenas para parar os programadores usando goto :)
fonte
goto
econst
refletiu sua herança C / C ++, mas eles não foram implementados (embora tenha havido debates sobre a implementação do último). Um casal mais gostaassert
eenum
não foi inicialmente reservado, mas talvez devesse ter sido, uma vez que foram implementados. Mas retrospectiva é uma coisa maravilhosa.Eles são reservados para uso futuro (consulte: Palavras-chave da Linguagem Java )
A razão pela qual não há nenhuma instrução goto em Java pode ser encontrada em " The Java Language Environment ":
fonte
goto
está reservado, mas não para uso futuro.Um exemplo de como usar rótulos "continue" em Java é:
Resultados:
fonte
É importante entender que a
goto
construção é remanescente dos dias em que os programadores programaram em código de máquina e linguagem assembly. Como essas linguagens são tão básicas (como em, cada instrução faz apenas uma coisa), o fluxo de controle do programa é feito completamente comgoto
instruções (mas na linguagem assembly, elas são chamadas de instruções de salto ou ramificação ).Agora, embora a linguagem C seja de nível bastante baixo, ela pode ser considerada uma linguagem assembly de nível muito alto - cada instrução e função em C pode ser facilmente dividida em instruções da linguagem assembly. Embora o C não seja o idioma principal para programar computadores atualmente, ele ainda é muito usado em aplicativos de baixo nível, como sistemas embarcados. Como a função C reflete tanto a função da linguagem assembly, faz sentido que isso
goto
esteja incluído em C.É claro que Java é uma evolução do C / C ++. Java compartilha muitos recursos do C, mas abstrai muito mais detalhes e, portanto, é simplesmente escrito de forma diferente. Java é uma linguagem de alto nível, portanto, simplesmente não é necessário ter recursos de baixo nível, como
goto
quando construções de alto nível, como funções, para, para cada e enquanto loops, o fluxo de controle do programa. Imagine se você estivesse em uma função e fizessegoto
um rótulo em outra função. O que aconteceria quando a outra função retornasse? Essa ideia é absurda.Isso não responde necessariamente por que o Java inclui a
goto
declaração e ainda não a deixa compilar, mas é importante saber por quegoto
foi usado em primeiro lugar, em aplicativos de nível inferior, e por que simplesmente não faz sentido usado em Java.fonte
Não,
goto
não é usado, mas você pode definir rótulos e deixar um loop até o rótulo. Você pode usarbreak
oucontinue
seguir o rótulo. Então você pode pular mais de um nível de loop. Dê uma olhada no tutorial .fonte
Não, felizmente, não existe
goto
em Java.A
goto
palavra-chave é reservada apenas, mas não usada (o mesmo vale paraconst
).fonte
Porque não é suportado e por que você deseja uma
goto
palavra - chave que não fez nada ou uma variável chamadagoto
?Embora você possa usar
break label;
econtinue label;
instruções para efetivamente fazer o quegoto
faz. Mas eu não recomendaria.fonte
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.
isso significa "Nós não o usamos, portanto, se você é oriundo de C ++, não vamos permitir que você o use". 2)goto
é um nome de método terrível. Desculpe. 3) quebrar e continuar são recomendados, mas não da maneira usada aqui . 4) "provavelmente" [citação necessária].Não,
goto
não é usado em Java, apesar de ser uma palavra reservada. O mesmo vale paraconst
. Ambos são usados em C ++, provavelmente o motivo pelo qual estão reservados; a intenção provavelmente era evitar confundir os programadores de C ++ migrando para Java e talvez também manter a opção de usá-los em revisões posteriores do Java.fonte
goto
não é suportado no futuro próximo, pelo menos;)Observe que você pode substituir a maioria dos usos benignos de goto por
Retorna
pausa
etiqueta de quebra
jogue dentro try-catch-finalmente
fonte
return
Como foi apontado, não existe
goto
no Java, mas a palavra-chave foi reservada caso a Sun sentisse vontade de adicionargoto
ao Java um dia. Eles queriam poder adicioná-lo sem quebrar muito código, então reservaram a palavra-chave. Observe que no Java 5 eles adicionaram aenum
palavra-chave e ela também não quebrou tanto código.Embora o Java não possua
goto
, ele tem algumas construções que correspondem a alguns usos degoto
, ou seja, poderbreak
econtinue
com loops nomeados. Além disso,finally
pode ser pensado como uma espécie de distorçãogoto
.fonte
Proibir declarações de variáveis com o mesmo nome.
por exemplo
int i = 0, goto;
fonte
É muito considerada uma daquelas coisas que você não faz, mas provavelmente foi listada como uma palavra reservada para evitar confusão para os desenvolvedores.
fonte
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.goto
Se você foi informado de que não existe uma declaração goto em Java, você foi enganado. De fato, Java consiste em duas camadas de código 'fonte'.
fonte
Veja o link a seguir mostra todas as palavras reservadas em java e informa quais versões foram adicionadas.
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
goto é reservado, mesmo que não seja usado no momento, nunca diga nunca no entanto :)
fonte
Também não sou fã
goto
, pois geralmente torna o código menos legível. No entanto, acredito que há exceções a essa regra (especialmente quando se trata de lexers e analisadores!)É claro que você sempre pode trazer seu programa para o Kleene Normalform traduzindo-o para algo semelhante a um montador e depois escrevendo algo como
(Então, basicamente, você escreve uma VM que executa seu código binário ... onde
line
corresponde ao ponteiro da instrução)Isso é muito mais legível do que o código que usa
goto
, não é?fonte
Claro que é palavra-chave, mas não é usada no nível do código-fonte.
Mas se você usa jasmin ou outra linguagem de nível inferior, que é transformada em bytecode, então "goto" está lá
fonte
Porque, embora a linguagem Java não a use, o JVM bytecode o faz.
fonte
load
palavra - chave?Goto não está em Java
você precisa usar GOTO Mas não funciona corretamente. na palavra-chave java, não é usado. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
fonte