这是我的代码:
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而不是静态块?
答案 0 :(得分:2)
那里没有任何静态内部类。您对静态块感到困惑。 静态内部类将按如下方式编写:
static class Inner { ... }
它不起作用,因为当JVM加载Outer
类时将执行static initialization block。
删除关键字static
,你会没事的。
答案 1 :(得分:0)
任何标识符的范围都在{...}
周围,这里是静态初始值设定项static{...}
。因此,方法Inner
中无法看到标识符outdisp()
。
将类Inner
的声明移到静态初始值设定项之外。