在 if 条件内声明变量且无大括号时编译器错误
2022-08-31 16:50:01
为什么第一次编译良好,第二次编译失败?if
if(proceed) {int i;} // This compiles fine.
if(proceed) int i;// This gives an error. (Syntax error on token ")", { expected after this token)
为什么第一次编译良好,第二次编译失败?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