我已经制作了两段代码。第一个工作正常,但另一个说这里不允许变量声明。
第一个代码(工作)
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];
}
}
背后的原因是什么;我认为代码的两个部分几乎相同。
答案 0 :(得分:8)
背后的原因我认为两个代码几乎相同。
差不多,但并不完全。要理解编译器为什么抱怨,查看language specification通常是个好主意。
ForStatement
的正文必须是Statement
。本地变量声明不是Statement
的选项 - 它是BlockStatement
的选项。
这是非常慎重的。故意阻止你编写无意义的代码。将局部变量声明为for
循环或if
语句中的唯一语句是没有意义的。它将在其他地方超出范围,为什么要声明呢?
它是一个块中唯一的语句仍然没有意义,但语言很难阻止你这样做。
答案 1 :(得分:5)
第二个代码无法编译的原因是Java编译器确定您声明为循环体的变量a
将保持未使用状态。由于声明周围没有花括号,因此绝对无法添加任何可以使用新声明的变量的代码,因此Java编译器会将其标记为错误。
如果是第一个程序,Java编译器可以检测到该变量未使用,但无法确定它是否为错误。您可能已经启动了尚未完成的代码块,因此编译器允许您编译代码并运行它。