2012-07-07 69 views
1

我重新初始化本地類的成員變量,並得到編譯錯誤。這裏有什麼問題?爲什麼這不會編譯?謝謝!匿名類的成員不能重新初始化

這不會編譯

public class TestSomething { 

public void someMethod(){ 
    class LocalClassInner{ 
     int i=100; // Error on this line.Syntax error on token ";", , expected 

     i=200; 
    }  
} 

} 

這將編譯就好

public class TestSomething { 

public void someMethod(){ 
    class LocalClassInner{ 
     int i=100; 
     //i=200; 
    }  
}} 

回答

2

這是不是一個真正的本地類的問題。你不能把任務陳述放在任何課程的「頂級」。

賦值語句需要放在方法,構造函數,靜態初始值設定項或實例初始值設定項中。

當你寫

int i = 100; 

你實際上是宣佈內部類的(你知道)。您可以重新分配這個領域,只要你在構造函數,方法,這樣做,等

附錄

下使用一個實例初始化,只是爲了好玩:

public void someMethod() { 
    class LocalClassInner { 
     int i = 100; 
     {i=200;} 
    }   
} 

它編譯罰款,請參見http://ideone.com/qjnv3

+0

謝謝雷。非常有意義。只是希望編譯器錯誤更有意義。 – thcricketfan 2012-07-08 00:19:33

0

第二項任務錯位。您不能將常規代碼放在方法,構造函數或初始化程序之外。這與匿名課程無關。

0

如果你想改變我的任務,它需要去一個方法。

像這樣:

public class TestSomething { 

public void someMethod(){ 
    class LocalClassInner{ 
     int i=100; 
     private void setI() 
     { 
      i=200; 
     } 
    }  
}}