Este código apenas me fez olhar para minha tela por alguns minutos:
loop:
for (;;) {
// ...
}
( linha 137 aqui )
Nunca tinha visto isso antes e não tinha ideia de que Java tinha uma palavra-chave "loop" (o NetBeans nem mesmo a coloria como uma palavra-chave) e compila bem com o JDK 6.
Qual é a explicação?
java
labeled-statements
Amy B
fonte
fonte
Como outros pôsteres já disseram, é um rótulo, não uma palavra-chave. Usar rótulos permite fazer coisas como:
Isso permite a quebra do loop externo.
Link para a documentação .
fonte
A pergunta foi respondida, mas como uma observação lateral:
Eu ouvi perguntas da entrevista como "Por que este código Java é válido?" (retirou o exemplo mais simples; aqui está o mais mesquinho, obrigado Tim Büthe):
Todos vocês sabem o que é esse código (além de horrível)?
Solução: dois rótulos,
url
ehttp
, um comentáriowww.myserver.com/myfile.mp3
e uma chamada de método com um parâmetro que possui o mesmo nome (url
) do rótulo. Sim, isso compila (se você definir a chamada do método e a variável local em outro lugar).fonte
Isso não é uma palavra-chave, é um rótulo. Ele deve ser usado com as palavras
break
-continue
chave e dentro de loops aninhados:fonte
inner
etiqueta é inútil aqui,break;
é o suficienteinner
rótulo para maior clareza.Não é uma palavra-chave; é um rótulo .
Ele permite que você vá etiquetado
break
e etiquetadocontinue
.fonte
Esta é realmente uma resposta ao comentário de Seanizer sobre a resposta de org.life.java, mas eu queria inserir algum código, então não pude usar o recurso de comentário.
Embora seja muito raro eu encontrar um uso para "quebrar rótulo", isso acontece ocasionalmente. O caso mais comum é quando procuro algo que está em uma estrutura que requer um loop aninhado para pesquisar, como:
Normalmente, nesses casos, empurro tudo para uma sub-rotina para que, em um acerto, possa retornar o objeto encontrado e, se ele cair do final do loop, posso retornar null para indicar um não encontrado ou talvez lançar uma exceção. Mas isso é ocasionalmente útil.
Francamente, acho que os inventores do Java incluíram esse recurso porque, entre isso e o tratamento de exceções, eles eliminaram os dois últimos usos legítimos do GOTO.
Adendo muito tarde:
Eu vi uma ótima linha de código uma vez. O programador escreveu:
Na verdade, ele não disse "example.com", mas o site da nossa empresa.
Dá a impressão de que existe um URL no código. Compila com sucesso, como se fizesse alguma coisa. Mas o que isso faz?
Na realidade, não faz nada. "http:" é um rótulo ao qual ele nunca faz referência. Então o "//" transforma o resto da linha em um comentário.
fonte
É um rótulo de ponto de interrupção, para permitir que você saia de um loop especificado, ao invés de simplesmente o mais interno em que você está.
É usado na linha 148 .
fonte
Você poderia escrever quase qualquer coisa, pois é um rótulo ... Você tem um exemplo aqui
fonte
É um rótulo, mas veja o seguinte exemplo:
Quando
b>10
o fluxo de execução vai para o loop externo.fonte
É um rótulo e os rótulos em Java podem ser usados com as palavras-chave
break
econtinue
para controle adicional sobre os loops.Aqui está explicado de uma maneira bastante boa:
Pensando em Java, pare e continue
fonte
Não é uma palavra-chave, mas um rótulo . Se estiver dentro do
for
loop, você escrevebreak loop;
e sai desse loop.fonte
É um rótulo. Geralmente, um rótulo usado em Java para transferir o fluxo de controle no local desejado, enquanto todas as palavras-chave, como continue e break, têm uma escolha especificada de local.
fonte