2017-11-25 130 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語句等是沒有意義的。它將在其他地方超出範圍,所以爲什麼要聲明它?

在塊中唯一的語句仍然沒有意義,但語言難以阻止你這樣做。