如题

解决方案 »

  1.   

    首先,这个是Java语言规范规定的内容。其次,你可以想象一下如何去指向这个静态成员。非静态内部类是通过外部类的this指针指向的。那么对于非静态内部类的动态成员,可以通过两个this指针确定位置。但是如果允许静态成员会出现什么情况?首先,静态成员是不能通过任何this指针的,但是为了确定这个成员,必须确定这个成员所在的类实例。但是这个实例必须通过一个this指针确定。这在语法以及处理上都会造成很大的麻烦。--网上搜的我的想法:Java 中的静态成员可以不用类的对象实例就可以被访问,定义为类的内部类如果不是声明为静态的内部类,那么创建外部类的实例对象的时候就会一起初始化内部类,既然非静态的内部类无论如何都一定会被初始化,那么静态成员就没有任何意义了。希望有帮助
      

  2.   

    非静态内部类中的成员不能声明为static。
    只有在顶层类或static的内部类才可以声明static成员。
    因为非static内部类总是由一个外部的对象生成,既然与对象相关,就没有静态的字段和方法。
      

  3.   

    解释下静态成员是不能通过任何this指针的。
      

  4.   

    请查看《Thinging in Java》原文: Fields and  methods in ordinary inner classes can only be at the outer level of a class, so ordinary inner classes cannot have static data, static fields, or nested classes. However, nested classes can have all of these。
    这个地方在中文版中错译为:普通内部类的字段与方法,只能放在类的外部层次上。所以普通内部类不能有static数据和字段,也不能包含嵌套类。其实作者想表达的意思是:普通内部类的域和方法只能是这个普通内部类的level(),所以里面就不可能有static修饰符了。你可能想知道当初java community为什么要这样规定?
    因为在普通内部类里再有static修饰就跟static内部类冗余了。static内部类中可以有static的域和方法,当然也可以有非static的域和方法。如果你愿意也可以全部是static的。