Если Вы даете
public class test
{
public static void main(String ar[])
{
if (true)
int i=0;
}
}
Это не компилирует, но тот же код с фигурными скобками:
public class test
{
public static void main(String ar[])
{
if (true)
{int i=0;}
}
}
Каково объяснение?
Объявления переменных могут декларироваться только в блоках, в основном.
Смотрите на грамматику для "оператора" в Спецификации языка Java - она включает в себя Блок, но не Локальные ПеременныеДекларацию - последняя является частью грамматики для блока .
Это, по сути, вопрос прагматизма: вы можете использовать только одно утверждение, если у вас нет скобки. Нет смысла объявлять переменную, если у Вас нет последующих утверждений, потому что Вы не можете использовать эту переменную. С тем же успехом можно просто иметь оператор выражения без объявления переменной - и что разрешено .
Это предотвращает такие ошибки как:
if (someCondition)
int x = 0;
System.out.println(x);
которые на первый взгляд могут выглядеть нормально, но на самом деле эквивалентны:
if (someCondition)
{
int x = 0;
}
System.out.println(x);
Лично я всегда использую фигурные скобки в любом случае, так как это усложняет создание подобных ошибок. (Меня однажды укусили, и было удивительно сложно заметить проблемный код)
.Это потому, что для объявления переменной нужен контекст блока (область его действия), а значит, нужны скобки (определяющие блок).
.Так как вы определяете переменную внутри блока, то вам нужны скобки.
Но ниже код скомпилируется с предупреждением компилятора.
int i;
if(true)
i = 0;