2014-01-05 26 views
0

這是我的代碼:嵌套類沒有確定由外部類的方法

class Outer 
{ 
    static int x=10; 
    static 
    { 
     class Inner 
     { 
      void disp() 
      { 
       System.out.println(x); 
      } 
     } 
    } 
    void outdisp() 
    { 
     for(int i=0;i<5;i++) 
     { 
      Inner in = new Inner(); 
      in.disp(); 
     } 
    } 

    public static void main(String []args) 
    { 
     Outer out = new Outer(); 
     out.outdisp(); 
    } 
} 

我只是想知道爲什麼方法outdisp()不能識別在這種情況下Inner,而它如果我將Inner類聲明爲靜態而不是靜態塊,那麼可以正常工作嗎?

回答

0

任何標識符的範圍在{...}範圍內,這裏是靜態初始化程序static{...}。因此標識Inner在方法outdisp()中不可見。

在靜態初始化程序之外移動類Inner的聲明。

2

你沒有任何靜態內部類那裏。你對靜態塊感到困惑。一個靜態內部類將寫成如下:

static class Inner { ... } 

它不工作,因爲static initialization block會當JVM加載Outer類執行。

刪除關鍵字static,你會沒事的。