如果条件和大括号中没有声明变量,编译器会报错
为什么这个第一if
编译阱和第二失败?
if(proceed) {int i;} // This compiles fine.
if(proceed) int i;// This gives an error. (Syntax error on token ")", { expected after this token)
因为语言规范如此说:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html
声明将一个实体引入到一个程序中,并且包含一个标识符(§3.8),可以在名称中使用该标识符来引用该实体。 申报的实体是以下之一:
...
一个局部变量,如下所示:
*在块中声明的局部变量(第14.4节)
*在for语句中声明的局部变量(第14.14节)
你的第一个例子是在一个块内声明i
(用花括号表示)。 你的第二个不是,也不是for
声明。
编辑补充说:这只是让普通人感觉。 如果允许的话,这将是无用的。 它会立即超出范围。
来自Java语言规范。
Block: { BlockStatementsopt } BlockStatements: BlockStatement BlockStatements BlockStatement BlockStatement: LocalVariableDeclarationStatement ClassDeclaration Statement
和
IfThenStatement: if ( Expression ) Statement
看来, int i
是一个LocalVariableDeclarationStatement
,而不是一个Statement
。 所以它不起作用。
这是因为它不会是有用的代码。 如果您有一个没有大括号({})的if语句,那么只会执行if之后的第一行/语句。 所以如果你只声明一个局部变量,它就不能在其他地方使用。 所以宣布它是绝对多余的。
if(proceed){
int i= 0;
// variable i can be used here
//...
}
if (proceed) int i; // i can not be used anywhere as it is a local variable
链接地址: http://www.djcxy.com/p/10197.html
上一篇: Compiler error when declaring a variable inside if condition and no curly braces