如果条件和大括号中没有声明变量,编译器会报错

为什么这个第一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

下一篇: Curly Braces Notation in PHP