首先明确下java的语言规则:静态成员变量需要在开始就分配内存进行初始化,而一般的类成员只是在类实例化的时候才会为其分配内存初始化。
我们先做一个假设,假设允许非静态内部类中有静态成员变量
class Demo{
public class A{
static String str;
}
}
则在程序开始时就需要给静态的str分配内存并初始化,如果这个假设成立了,那么内部类A也应该有相应的内存,但是由于内部类A只是Demo的一个非静态成员变量,在类Demo还没有实例化的时候就有了相应的内存,这跟原来预定好的语言标准有冲突,在严谨的java语言中不可能出现。所以这个假设不能成立 |