不允许Java变量声明
问题描述:
我制作了2段代码。第一个工作正常,但另一个说变量声明不允许在这里。不允许Java变量声明
一码(工作)
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];
}
}
这是什么背后的原因;我认为这两段代码几乎是一样的。
答
第二个代码无法编译的原因是,Java编译器确实知道您声明为循环主体的变量a
将保持未使用状态。由于声明周围没有大括号,所以绝对没有办法添加可以使用新声明变量的代码,因此Java编译器将其标记为错误。
在第一个程序的情况下,Java编译器可以检测到该变量未被使用,但不能确定它是否为错误。您可能启动了尚未完成的代码块,因此编译器可让您编译代码并运行它。
答
背后的原因是什么,我认为这两个代码几乎相同。
差不多,但不完全。要理解编译器为什么抱怨,通常看看language specification是个好主意。
ForStatement
的正文必须是Statement
。局部变量声明不是Statement
的选项 - 它是BlockStatement
的选项。
这是非常慎重的。这是故意阻止你写无意义的代码。将局部变量声明为for
循环中的唯一语句或if
语句等是没有意义的。它将在其他地方超出范围,所以为什么要声明它?
在块中唯一的语句仍然没有意义,但语言难以阻止你这样做。
好吧,这意味着变量声明没有大括号将始终保持未使用,这就是错误的原因,谢谢。 –