Бесконечные циклы в Java

Посмотрите на следующее бесконечноеwhile цикл в Java. Это вызывает ошибку во время компиляции для оператора под ним.

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 условие внутри цикла всегдаfalse и, следовательно, цикл никогда не может вернуться и может быть определен компилятором во время самой компиляции.

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;
    }
}

Это потому чтоfinally блок всегда выполняется, хотяreturn заявление встречается до того, как вtry заблокировать себя.

Ответы на вопрос(13)

Ваш ответ на вопрос