Infinite loops en Java

Mire la siguiente @ infiniwhile loop en Java. Provoca un error en tiempo de compilación para la siguiente declaración.

while(true) {
    System.out.println("inside while");
}

System.out.println("while terminated"); //Unreachable statement - compiler-error.

El siguiente mismo infinitowhile loop, sin embargo, funciona bien y no emite ningún error en el que acabo de reemplazar la condición con una variable booleana.

boolean b=true;

while(b) {
    System.out.println("inside while");
}

System.out.println("while terminated"); //No error here.

En el segundo caso también, la declaración después del ciclo es obviamente inalcanzable porque la variable booleanab es cierto aún el compilador no se queja en absoluto. ¿Por qué

Edit: La siguiente versión dewhile se atasca en un bucle infinito como es obvio pero no emite errores de compilación para la siguiente declaración a pesar de queifa condición @ dentro del bucle siempre esfalse y, en consecuencia, el bucle nunca puede volver y puede ser determinado por el compilador en el mismo tiempo de compilación.

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: Lo mismo conif ywhile.

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 siguiente versión dewhile también se atasca en un bucle infinito.

while(true) {

    try {
        System.out.println("inside while");
        return;   //Replacing return with break makes no difference here.
    } finally {
        continue;
    }
}

Esto es porque elfinallyl bloque @ siempre se ejecuta aunque elreturna declaración @ se encuentra ante ella dentro de latry bloque en sí mismo.

Respuestas a la pregunta(30)

Su respuesta a la pregunta