Java,在没有花括号的if语句中声明一个变量

时间:2014-04-15 10:46:30

标签: java

我遇到了这段代码的问题:

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

1 个答案:

答案 0 :(得分:2)

取自关于Local Variable Declaration的Java规范:

  

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

这是devnull评论所指出的一个答案。