2014-06-20 26 views
-2

我是java新手。任何人都可以解釋爲什麼下面的程序不工作?謝謝。java程序沒有編譯,變量的範圍和生命期問題

class AnonymousInnerClassInMethod 
{ 
    public static void main(String[] args) 
    { 
     int local = 1; 

     Comparable compare = new Comparable() 
     { 
      public int compareTo(Object value) 
      { 
       return (Integer)value - local; 
      } 
     }; 
     System.out.println(compare.compareTo(5)); 
    } 
} 
+0

嘗試'final int local = 1;'(請參閱http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined -in-A-differen)。 – sp00m

+2

請將更多精力放在將來格式化您的代碼上。在提交之前先看看你的文章的預覽,然後問自己,如果你想回答的話,你是否會希望閱讀它。 –

回答

0

你要麼必須聲明localfinal:(上this question關於此事的更多信息,由sp00m的建議)

final int local = 1; 

或者將其定義爲類的static領域:

class AnonymousInnerClassInMethod { 
    private static int local = 1; 
    … 
} 
0

第一個問題:你不能聲明一個public static void main(String[] args)嵌套類中,除非您將類視爲static爲好。

第二個問題:用於定義比較的compareTo方法的匿名構造函數不能訪問非最終變量local。這是一個錯誤,因爲在構造對象期間/之後變量可能會發生變化。因此,如果將其標記爲final,則確保變量不能更改。