Когда в Java возникает условие «недоступный код»?
Когда после бесконечного цикла записывается какое-то утверждение, оно становится недоступным кодом. Например:
for(;;)
{
}
Sytem.out.println("Test-1"); //unreachable code
Но я сталкиваюсь здесь с некоторыми трудностями.
Посмотрите на два фрагмента кода ниже:
Фрагмент кода1:
for(final int z=4;z<6;)
{
}
System.out.println("Test-2"); //unreachable code
Здесь, последний оператор должен быть недоступен, потому что цикл бесконечен, а результат соответствует ожидаемому.
Код Snippet2:
final int z=4;
for(;;)
{
if(z<2)
break;
}
System.out.println("Test-3"); //not unreachable
Концептуально цикл for в приведенном выше коде также бесконечен, поскольку z является конечным иif(z<2)
определяется только во время компиляции. Условие if никогда не будет истинным, и цикл никогда не прервется. Но последнее утверждение в приведенном выше коде не является недостижимым.
Вопросы:
Почему это происходит?
Может кто-нибудь сказать мне точные правила, по которым мы можем видеть, недоступен ли код или нет.