if(true)
String str;
嗨,上面的代码给出了一个错误:
此行的多个标记
- str无法解析为变量
- 令牌上的语法错误"字符串",此令牌后预期的AssignmentOperator
为什么会出现这样的错误?当然我知道str在定义之后将无法访问。但是java并没有给出这样的解释。对我来说似乎很奇怪。
答案 0 :(得分:6)
这是因为您将声明放在条件的受保护块中。但是,根据Java语法,Java声明不被视为语句。
允许声明与语句混合,作为用大括号括起来的块的一部分,但是单个声明不被视为语句。这非常有意义,因为您声明的变量不可用:如果您想要为其副作用进行声明初始化,例如
if (true)
String str = someFunction();
您可以使用表达式语句而不声明无论如何都无法使用的变量:
if (true)
someFunction();
因此,如果您在条件或循环中单独放置声明,编译器会确定您犯了错误,并生成错误消息以提醒您该问题。