Я просматриваю некоторый Java-код и снова сталкиваюсь с подобным случаем.Использование ключевого слова Strange continue
while (true)
try
{
//some simple statements
continue;
try {
Thread.sleep(1000L);
}
catch (InterruptedException e)
{
SamsetUtils.LogError(this.logger, e.getMessage() + ".29");
}
if (!SamsetUtils.BlockingDistributorThread)
{
//some very long and critical code here
}
}
//several catch blocks follow
В моем понимании, критический код всегда будет опущен, так как по-прежнему оператор всегда будет выполняться и всегда будет начать новую итерацию немедленно. Сначала я отметил похожую ситуацию как ошибку, но на этот раз он поднял мои подозрения, потому что это все часть предположительно рабочего кода, который используется на коммерческой основе. Является ли этот отрывок каким-то образом, каким образом я не знаю?
Аналогичная ситуация здесь:
while (true)
try {
//some simple statements
if (notifications != null) {
int i = 0; continue;
this.recivedNotifies.add(notifications[i].getName());
i++; if (i >= notifications.length)
{
makeCallBack();
}
} else {
Thread.sleep(2000L);
}
}
catch (Exception e) {
//catch statements
}
Этот фрагмент не должен даже компилироваться, не говоря уже о правильной работе - компилятор Java должен сообщить об ошибке «недостижимый оператор». Вы уверены, что это точный ** код, который вы видите? –
Да. Это недостижимый код. –
Да, я скопировал и вставил прямо из файла, и только что отредактировал некоторые заявления в отмеченных местах для ясности. Невозможно скомпилировать его сейчас из-за отсутствия проблем с библиотекой, но код был фактически декомпилирован из jar –