Java,在不带大括号的if语句中声明变量

Java,在不带大括号的if语句中声明变量,java,Java,我对此代码有问题: if (false) int i = 9; ... 我意识到它是无用的,因为if语句的范围将只包含声明,在声明之后我将无法访问它,因为它将超出范围,并且可能编译器足够聪明,可以避免这种情况。如果我包含大括号,一切都会正常工作,可能是因为编译器知道我可以在声明之后编写更多代码,并在代码中使用变量。 我只是想知道,这真的是我得到编译时错误的原因,还是有更深刻的解释? 我得到: A.java:4: '.class' expected int i = 4;

我对此代码有问题:

if (false)
  int i = 9;
...
我意识到它是无用的,因为if语句的范围将只包含声明,在声明之后我将无法访问它,因为它将超出范围,并且可能编译器足够聪明,可以避免这种情况。如果我包含大括号,一切都会正常工作,可能是因为编译器知道我可以在声明之后编写更多代码,并在代码中使用变量。 我只是想知道,这真的是我得到编译时错误的原因,还是有更深刻的解释? 我得到:

A.java:4: '.class' expected
      int i = 4;
          ^
A.java:4: not a statement
      int i = 4;
      ^
A.java:4: illegal start of expression
      int i = 4;
            ^
A.java:4: ';' expected
      int i = 4;
             ^
4 errors
提前感谢,,
Alessandro

摘自Java规范关于:

每个局部变量声明语句都立即包含在一个块中。局部变量声明语句可以与块中其他类型的语句自由混合


正如s的评论所指出的,这是一个答案。

可能也会有所帮助。简短的答案是局部变量声明需要在块中。如果不加括号,情况就不是这样了。因此出现了错误。你能发布全部代码吗?非常感谢大家!我正在准备OCA认证,还有你的回答(还有其他问题!)我学到了很多有用的东西,不仅仅是为了考试!