2017-11-25 97 views
1

我制作了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]; 
    } 
} 

这是什么背后的原因;我认为这两段代码几乎是一样的。

回答

4

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

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

+0

好吧,这意味着变量声明没有大括号将始终保持未使用,这就是错误的原因,谢谢。 –

6

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

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

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

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

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