不允许Java变量声明

Jav*_*Fan 1 java object

我已经制作了两段代码.第一个工作正常,但另一个说这里不允许变量声明.

第一个代码(工作)

class Test {
    public static void main(String args[]){
        for(int i=0;i<10;i++) {
            int a[]=new int[10];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

第二个代码(不工作)

class Test {
    public static void main(String args[]) {
        for(int i=0;i<10;i++)
            int a[]=new int[10];
    }
}
Run Code Online (Sandbox Code Playgroud)

它背后的原因是什么?我认为代码的两个部分几乎相同.

Jon*_*eet 10

它背后的原因我认为两个代码几乎相同.

几乎,但不完全.要理解编译器为什么抱怨,查看语言规范通常是个好主意.

一个人的身体ForStatement必须是一个Statement.局部变量声明不是a的选项Statement- 它是a的选项BlockStatement.

这是非常慎重的.故意阻止你编写无意义的代码.将局部变量声明为for循环或if语句中的唯一语句是没有意义的.它将在其他地方超出范围,为什么要声明它?

它是块内唯一语句的情况仍然毫无意义,但语言阻止你这样做会更难.


das*_*ght 5

第二个代码无法编译的原因是Java编译器肯定知道a您声明为循环体的变量将保持未使用状态。由于声明周围没有花括号,因此绝对没有办法添加可以充分利用新声明的变量的代码,因此Java编译器将其标记为错误。

在第一个程序的情况下,Java编译器可以检测到该变量未使用,但是不能确定它是错误的。您可能已经开始了尚未完成的代码块,因此编译器使您可以编译代码并运行它。