Regardez les suivantes infinie while
boucle en Java. Il provoque une erreur de compilation pour la déclaration ci-dessous.
while(true) {
System.out.println("inside while");
}
System.out.println("while terminated"); //Unreachable statement - compiler-error.
Le suivant du même infinie while
boucle, cependant, fonctionne très bien et n'émet pas de toutes les erreurs dont je viens de remplacer la condition d'une variable booléenne.
boolean b=true;
while(b) {
System.out.println("inside while");
}
System.out.println("while terminated"); //No error here.
Dans le second cas, également, de l'instruction après la boucle est évidemment inaccessible car la variable booléenne b
est vrai encore que le compilateur ne se plaint pas du tout. Pourquoi?
Edit : La prochaine version de l' while
rester coincé dans une boucle infinie comme évident, mais les enjeux n'erreurs du compilateur pour la déclaration ci-dessous, même si l' if
condition dans la boucle est toujours false
et, par conséquent, la boucle peut ne jamais revenir et peut être déterminée par le compilateur au moment de la compilation elle-même.
while(true) {
if(false) {
break;
}
System.out.println("inside while");
}
System.out.println("while terminated"); //No error here.
while(true) {
if(false) { //if true then also
return; //Replacing return with break fixes the following error.
}
System.out.println("inside while");
}
System.out.println("while terminated"); //Compiler-error - unreachable statement.
while(true) {
if(true) {
System.out.println("inside if");
return;
}
System.out.println("inside while"); //No error here.
}
System.out.println("while terminated"); //Compiler-error - unreachable statement.
Edit : Même chose avec if
et while
.
if(false) {
System.out.println("inside if"); //No error here.
}
while(false) {
System.out.println("inside while");
// Compiler's complain - unreachable statement.
}
while(true) {
if(true) {
System.out.println("inside if");
break;
}
System.out.println("inside while"); //No error here.
}
La prochaine version de l' while
également rester coincé dans une boucle infinie.
while(true) {
try {
System.out.println("inside while");
return; //Replacing return with break makes no difference here.
} finally {
continue;
}
}
C'est parce que l' finally
bloc est toujours exécutée même si l' return
instruction rencontre dans l' try
bloc lui-même.