if语句体

时间:2018-01-14 16:43:32

标签: java

当我尝试运行此代码时:

public static void main(String[] args) {

    double salary = 10.1;

    if (salary >= 100.3)
        double number = salary * 10;
    else
        double number = salary * 20;

}

我收到以下错误:

  

令牌“double”上的语法错误,删除此令牌

并且两者都是:

  

数字无法解析为变量

现在代码故意不好,因为这是一个问题,我们必须说明它的所有错误。

据我所知,最好不要两次声明相同的变量,最好总是使用花括号;但是,如果不使用花括号,为什么double number = salary * 10;double number = salary * 20;会导致问题?我认为它仍然可以正确编译和运行(如果使用括号,它可以工作)。

1 个答案:

答案 0 :(得分:4)

因为它违反了Java语法。 JLS defines if statements如下:

IfThenStatement:
    if ( Expression ) Statement

所以它期待Statement。大括号表示BlockBlock is a Statement。但是,变量声明 a Statement 1

这是一种直觉上明智的行为 - 如果你可以在这里声明一个变量,它将毫无用处,因为它会立即超出范围。

<子> 1。令人困惑的是,变量声明在JLS中称为LocalVariableDeclarationStatement。但是,就语言语法而言,这不是Statement