Ответ 1
В Java объявление переменной Thread t = ...
технически не является выражением, тогда как блок { ... }
. Следующее for ( ... )
должно быть выражением.
public class MultithreadingFour {
public static void main(String args[]){
A obj = new A();
Task task= new Task();
for(int i=0; i<10; i++)
Thread t= obj.newThread(task);
}
}
Ошибка компиляции: несколько маркеров в этой строке
Syntax error, insert ";" to complete Statement
t cannot be resolved to a variable
Syntax error, insert "AssignmentOperator Expression" to complete Assignment
Syntax error, insert ":: IdentifierOrNew" to complete ReferenceExpression
Thread cannot be resolved to a variable
тогда
public class MultithreadingFour {
public static void main(String args[]){
A obj = new A();
Task task= new Task();
for(int i=0; i<10; i++){
Thread t= obj.newThread(task);
}
}
}
успешно компилируется (обратите внимание на добавленные фигурные скобки в цикле for
).
В Java объявление переменной Thread t = ...
технически не является выражением, тогда как блок { ... }
. Следующее for ( ... )
должно быть выражением.
Тело оператора "for" должно быть "выражением".
Локальное объявление переменных не является инструкцией. Таким образом, вы не можете поместить объявление локальной переменной в качестве "оператора" для инструкции "for".
Вот разрешенный синтаксис циклов for
:
BasicForStatement: for (ForInitopt; Expressionopt; ForUpdateopt) Statement
ForStatementNoShortIf: for (ForInitopt; Expressionopt; ForUpdateopt) StatementNoShortIf
Вы можете прочитать JLS 14. Блоки и заявления для получения дополнительной информации.
Подумайте об этом, было бы нелогично разрешить объявление переменной в однострочном цикле, поскольку вы никогда не сможете получить к ней доступ, поскольку он доступен только в области цикла.