If you give
public class test
{
public static void main(String ar[])
{
if (true)
int i=0;
}
}
Variable declarations can only be declared in blocks, basically.
Looks at the grammar for "statement" in the Java Language Specification - it includes Block, but not LocalVariableDeclarationStatement - the latter is part of the grammar for a block.
This is effectively a matter of pragmatism: you can only use a single statement if you don't have a brace. There's no point in declaring a variable if you have no subsequent statements, because you can't use that variable. You might as well just have an expression statement without the variable declaration - and that is allowed.
This prevents errors such as:
if (someCondition)
int x = 0;
System.out.println(x);
which might look okay at first glance, but is actually equivalent to:
if (someCondition)
{
int x = 0;
}
System.out.println(x);
Personally I always use braces anyway, as it makes that sort of bug harder to create. (I've been bitten by it once, and it was surprisingly tricky to spot the problematic code.)