Estava olhando o guia de certificação do Rafael Pereira e tem uma pergunta com o seguinte for
for(;;){
System.out.println("go");
}
Esse tipo de for apesar de ser esquisito ele é compilado e gera um loop infinito.
Mas se eu coloca-lo antes de um system.out.println ele não compila
e se eu colocar depois compila normalmente.
antes:
publicstaticvoidmain(String[]args){System.out.println("teste de for Bizarro");for(;;){System.out.println("go");}}
depois:
publicstaticvoidmain(String[]args){for(;;){System.out.println("go");}System.out.println("teste de for Bizarro");}
Imagino que seja porque o compilador reconhece que há um comando após um laço infinito e não permite que isso aconteça já que esse comando nunca vai ser executado, no caso do println() estar depois do for.
O compilador não deu um detalhe específico depois da tentativa de compilação não?
Z
ZehOliveira
Dá “unreachable code”.
Ele não é tão burrinho assim, o compilador checa se a expressão de checagem não foi passada ou se foi passado true. Nestes casos ele procura se tem algum “break” dentro de for, se não tiver é por que nunca vai sair dali e o trecho abaixo é inalcançável, daí o erro.
rmarin
É isso aí, qualquer caso de Unreachable Code não compila.
Outro exmplo é quando existe um comando após o return de algum método:
Ahhh sim…é bem claro, mas assim usar um for infinito assim é meio sem noção…sem nenhum break :shock:
rodolfodev
esse é um tipo de pergunta q se eu não tivesse testado para ver oq acontece com certeza marcaria que não compilava como marquei no simulado.
T
thingol
Esse for (que o sr. Gosling copiou da linguagem C) é o tipo de coisa que dá um “nó na cabeça” de quem vem de qualquer outra linguagem, já que é equivalente a: