2013-07-10 111 views
2

我有一個Java內部類的問題,我找不出來。假設你有修改內部類中的變量Java

class Outer 
{ 
    int outer = 0; 
    class Inner 
    { 
      int inner = Outer.this.outer; //(or just outer as it is not shadowed) 
      inner = 3; //or whatever, even outer = 3 
    } 
} 

好吧,當我寫的最後一個任務我得到的編譯錯誤

Syntax error on token ";", , expected 

的先例線。

爲什麼我不能修改內部?

謝謝!

回答

6

你不能有一個方法之外的聲明。一種技術是使用一個實例初始化塊

class Outer 
{ 
    int outer = 0; 
    class Inner 
    { 
      int inner = Outer.this.outer; //(or just outer as it is not shadowed) 
      // instance initializer block: 
      { 
       inner = 3; //or whatever, even outer = 3 
      } 
    } 
} 

可替代地,定義構造:

class Outer 
{ 
    int outer = 0; 
    class Inner 
    { 
      int inner = Outer.this.outer; //(or just outer as it is not shadowed) 
      Inner() { 
       inner = 3; //or whatever, even outer = 3 
      } 
    } 
} 
+0

+1:實例初始值設定項(學到了新的東西:) – Simon

3

您對inner的分配必須位於方法或構造函數內,而不是類中的「鬆散」。

4

你必須將代碼放在一個方法或構造函數:

class Outer 
{ 
    int outer = 0; 
    class Inner 
    { 
      int inner = Outer.this.outer; 
      public Inner() { 
       inner = 3; 
      } 

      public increment() { 
       inner++; 
      } 
     } 
} 
0

您需要包括行:

inner=3; 

在一個方法在內部階層。

0

Yuo無法直接初始化inner = 3;以外的方法。請確保inner = 3;裏面有任何方法或構造函數。

public Inner() 
{ 
     inner = 3; 
} 
0

以上所有評論都不夠清楚。

所以當你聲明一個類,你要麼提及(聲明)變量來分配一些值, 例如private int x = 3;它的任務也包括在課程本身中。 爲什麼編譯呢?

事情是在對象拳擊我假設,只是沒有時間現在,晚上我會回家,併爲你清理。