public class SomeClass{
public static void main (String[] args){
if(true) int a = 0;// this is being considered as an error
if(true){
int b =0;
}//this works pretty fine
}
}//end class
在上面的类中,第一个if语句显示编译错误
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Syntax error on token "int", delete this token
a cannot be resolved to a variable
然而,第二个if语句工作正常。我自己也搞不清楚。我知道在单个语句if
中声明变量是没有用的。这两个陈述如何不同可以请一些人解释一下。如果问题非常简单,请原谅。
答案 0 :(得分:13)
要定义int a
的范围,您需要花括号。这就是为什么你得到
if(true) int a = 0;
虽然这有效:
if(true){
int b =0;
}
有关if语句的信息,请参阅JLS §14.9
IfThenStatement:
if ( Expression ) Statement
在if(true) int a = 0;
时,int a = 0
为LocalVariableDeclarationStatement
答案 1 :(得分:8)
它在java语言规范中指定。 IfThenStatement
指定为
if ( Expression ) Statement
int a = 0;
不是声明,而是LocalVariableDeclarationStatement
(不是 Statement
的子类型)。但是Block
是Statement
而LocalVariableDeclarationStatement
是块的合法内容。
if (true) int a = 0;
^--------^ LocalVariableDeclarationStatement, not allowed here!
if (true) {int a = 0;}
^----------^ Statement (Block), allowed.
<强>参考强>
答案 2 :(得分:5)
从Java语言规范§14.2中,您可以看到 LocalVariableDeclaration 不是 Statement ,因此只能出现在 BlockStatement中:
BlockStatement:
LocalVariableDeclarationStatement
ClassDeclaration
Statement
答案 3 :(得分:0)
单独定义变量。并在If中分配您想要的值。如果你这样做,它只会是if块内的一个变量。但是,如果你有一条线,如果阻止它真的没有意义。