Код: Выделить всё
while(true) {
System.out.println("inside while");
}
System.out.println("while terminated"); //Unreachable statement - compiler-error.
Следующий тот же бесконечный цикл while, однако работает нормально и не выдает никаких ошибок, в которых Я просто заменил условие логической переменной.
Код: Выделить всё
boolean b=true;
while(b) {
System.out.println("inside while");
}
System.out.println("while terminated"); //No error here.
Во втором случае оператор после цикла явно недоступен, поскольку булева переменная b это правда, но компилятор вообще не жалуется. Почему?
Изменить: Следующая версия while застревает в бесконечный цикл очевиден, но не выдает ошибок компилятора для оператора, расположенного ниже, даже если условие if внутри цикла всегда ложно и, следовательно, цикл никогда не может вернуться и может быть определен компилятором в само время компиляции.
Код: Выделить всё
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.
Изменить: То же самое с if и 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.
}
Следующая версия while также застревает в бесконечном цикле.
Код: Выделить всё
while(true) {
try {
System.out.println("inside while");
return; //Replacing return with break makes no difference here.
} finally {
continue;
}
}
Подробнее здесь: https://stackoverflow.com/questions/857 ... ps-in-java
Мобильная версия