ブロックを省略するとコンパイラがエラーをはく

Javaにて、

if(cond){
    int i = 0;
}

とすると特にエラーは出ないが、

if(cond)
    int i = 0;

とすると

'.class' がありません。
                        int i = 0;
                            ^
文ではありません。
                        int i = 0;
                        ^
式の開始が不正です。
                        int i = 0;
                              ^
';' がありません。
                        int i = 0;
                               ^

とか言うコンパイルエラーになる。
まあそもそもこのタイミングで変数の宣言をすること自体無意味なんだけど。
変数の宣言って文法的にはどういう扱いなんだろ。