如果块变量定义给出错误,则为非括号

时间:2014-08-23 19:02:23

标签: java

if(true)
     String str;

嗨,上面的代码给出了一个错误:

  

此行的多个标记
     - str无法解析为变量
     - 令牌上的语法错误"字符串",此令牌后预期的AssignmentOperator

为什么会出现这样的错误?当然我知道str在定义之后将无法访问。但是java并没有给出这样的解释。对我来说似乎很奇怪。

1 个答案:

答案 0 :(得分:6)

这是因为您将声明放在条件的受保护块中。但是,根据Java语法,Java声明不被视为语句。

允许声明与语句混合,作为用大括号括起来的块的一部分,但是单个声明不被视为语句。这非常有意义,因为您声明的变量不可用:如果您想要为其副作用进行声明初始化,例如

if (true)
    String str = someFunction();

您可以使用表达式语句而不声明无论如何都无法使用的变量:

if (true)
    someFunction();

因此,如果您在条件或循环中单独放置声明,编译器会确定您犯了错误,并生成错误消息以提醒您该问题。