2014-01-05 25 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,你会没事的。