Java不允许在非静态内部类里面定义静态成员。下面的程序显示了非静态内部类里包含静态成员将引起编译错误。
public class InnerNoStatic {
private class InnerClass{
static{
System.out.println("=========");
}
private static int intProp;
private static void test(){}
}
}
为什么不允许在非静态内部类里面定义静态成员?求大神解释一下
------解决思路----------------------
mark 同问,求详细解答
------解决思路----------------------
虚拟机加载:加载类---所有静态成员初始化---生成对象,初始化非静态成员
new A( ).new B( )
java虚拟机要求所有静态变量创建必须在对象创建前完成
而非静态内部类依附于外部类对象
(你可以把非静态内部类看成是一个普通的非静态成员,是不是要等类生成对象后才有这个非静态成员)
其内部类的加载必须在外部类对象创建之后才能完成
如果内部类有静态变量就违背了这个原则