静态块内的嵌套类不是由外部类的方法标识的

时间:2014-01-05 07:41:44

标签: java class static nested

这是我的代码:

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,而如果我声明{{1}它可以正常工作class as static而不是静态块?

2 个答案:

答案 0 :(得分:2)

那里没有任何静态内部类。您对静态块感到困惑。 静态内部类将按如下方式编写:

static class Inner { ... }

它不起作用,因为当JVM加载Outer类时将执行static initialization block

删除关键字static,你会没事的。

答案 1 :(得分:0)

任何标识符的范围都在{...}周围,这里是静态初始值设定项static{...}。因此,方法Inner中无法看到标识符outdisp()

将类Inner的声明移到静态初始值设定项之外。