不允许Java变量声明

时间:2017-11-25 10:37:12

标签: java object

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

第一个代码(工作)

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

第二个代码(不工作)

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

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

2 个答案:

答案 0 :(得分:8)

  

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

差不多,但并不完全。要理解编译器为什么抱怨,查看language specification通常是个好主意。

ForStatement的正文必须是Statement。本地变量声明不是Statement的选项 - 它是BlockStatement的选项。

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

它是一个块中唯一的语句仍然没有意义,但语言很难阻止你这样做。

答案 1 :(得分:5)

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

如果是第一个程序,Java编译器可以检测到该变量未使用,但无法确定它是否为错误。您可能已经启动了尚未完成的代码块,因此编译器允许您编译代码并运行它。