黑马程序员技术交流社区

标题: 为什么非静态内部类里不能有静态成员 [打印本页]

作者: whocases    时间: 2012-6-2 21:02
标题: 为什么非静态内部类里不能有静态成员
为什么非静态内部类里不能有静态成员呢?求解~~~
作者: 包晗    时间: 2012-6-3 00:55
应该是定死了的,你先记住就好
内部的静态类应该是不能直接被实例化.
静态成员变量需要在一开始就分配内存进行初始化,而一般的类成员只是在类实例化的时候才会为止分配内存初始化.

作者: 王月    时间: 2012-6-3 10:10
      lz说的应该是内部类定义在了局部位置时的情况

    首先lz要明白一点,static只能修饰成员(成员变量和成员方法)。

        如果你定义的内部类在类的局部位置(也就是成员方法中),那这个内部类中可以有静态方法,但必须将这个内部类也修饰为静态类,而这个内部类又在局部位置,
   这样就违背了上面说的static只能修饰成员。所以不可以。

作者: --☆伟☆--    时间: 2012-6-3 10:36
首先明确下java的语言规则:静态成员变量需要在开始就分配内存进行初始化,而一般的类成员只是在类实例化的时候才会为其分配内存初始化。
我们先做一个假设,假设允许非静态内部类中有静态成员变量
class Demo{
   public class A{
   static String str;
   }
}
则在程序开始时就需要给静态的str分配内存并初始化,如果这个假设成立了,那么内部类A也应该有相应的内存,但是由于内部类A只是Demo的一个非静态成员变量,在类Demo还没有实例化的时候就有了相应的内存,这跟原来预定好的语言标准有冲突,在严谨的java语言中不可能出现。所以这个假设不能成立
作者: 李海晓    时间: 2012-6-7 15:58
静态成员变量是要分给内存空间的,一个非静态内部类,自己都没有固定的内存空间,可是自己的成员变量居然都能分配内存空间,是不是太不合理了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2