Ответ 1
Переменные объявления могут быть объявлены только в блоках.
Рассматривается грамматика в "описании" в Спецификации языка Java - она включает в себя Block, но не LocalVariableDeclarationStatement - последняя является частью грамматика для блока.
Это фактически вопрос прагматизма: вы можете использовать только один оператор, если у вас нет скобки. Нет смысла объявлять переменную, если у вас нет последующих операторов, потому что вы не можете использовать эту переменную. У вас может быть просто выражение выражение без объявления переменной - и это разрешено.
Это предотвращает такие ошибки, как:
if (someCondition)
int x = 0;
System.out.println(x);
который может выглядеть нормально на первый взгляд, но на самом деле эквивалентен:
if (someCondition)
{
int x = 0;
}
System.out.println(x);
Лично я всегда использую фигурные скобки, так как это затрудняет создание такой ошибки. (Меня однажды укусили, и было удивительно сложно найти проблематичный код.)