¿Cuándo se produce la condición "Código inalcanzable" en Java?

Cuando hay alguna declaración escrita después del bucle infinito, esa declaración se convierte en el código inalcanzable. Por ej .:

for(;;) 
{
}
Sytem.out.println("Test-1"); //unreachable code

Pero estoy enfrentando algunas dificultades aquí.

Mire los dos fragmentos de código a continuación:

Fragmento de código1:

for(final int z=4;z<6;)
{
}
System.out.println("Test-2"); //unreachable code

Aquí, la última declaración debe ser inalcanzable porque el bucle es infinito y la salida es la esperada.

Fragmento de código2:

final int z=4;
for(;;)
{
    if(z<2)
        break;
}
System.out.println("Test-3");  //not unreachable

Conceptualmente, el bucle for en el código anterior también es infinito ya que z es final yif(z<2) se determina solo en tiempo de compilación. La condición if nunca será verdadera y el ciclo nunca se romperá. Pero, la última declaración en el código anterior no es inalcanzable.

Preguntas:

¿Por qué está pasando esto?

¿Alguien puede decirme las reglas exactas por las cuales podemos ver si el código es inalcanzable o no?

Respuestas a la pregunta(3)

Su respuesta a la pregunta