日期:2014-05-20  浏览次数:20697 次

java为什么非静态内部类里面不能有静态成员
如题

------解决方案--------------------
首先,这个是Java语言规范规定的内容。其次,你可以想象一下如何去指向这个静态成员。非静态内部类是通过外部类的this指针指向的。那么对于非静态内部类的动态成员,可以通过两个this指针确定位置。但是如果允许静态成员会出现什么情况?首先,静态成员是不能通过任何this指针的,但是为了确定这个成员,必须确定这个成员所在的类实例。但是这个实例必须通过一个this指针确定。这在语法以及处理上都会造成很大的麻烦。--网上搜的

我的想法:Java 中的静态成员可以不用类的对象实例就可以被访问,定义为类的内部类如果不是声明为静态的内部类,那么创建外部类的实例对象的时候就会一起初始化内部类,既然非静态的内部类无论如何都一定会被初始化,那么静态成员就没有任何意义了。希望有帮助
------解决方案--------------------
恩,静态成员的好处就在于不用声明类的实例而直接使用类名访问,假设要访问非静态内部类里的静态成员,由于是非静态内部类,那么必须先声明外部类的实例才行,内部类也会被初始化,这时刚才说到的静态成员的好处就体现不出来了
------解决方案--------------------
非静态内部类中的成员不能声明为static。
只有在顶层类或static的内部类才可以声明static成员。
因为非static内部类总是由一个外部的对象生成,既然与对象相关,就没有静态的字段和方法。
------解决方案--------------------
静态的变量是只能初始化一次的,占用一个内存。一个类中定义的静态方法,可以直接类名.方法名来调用。
非静态的则不是,是要被实例化后,才可使用的。两者不一样,在非静态内部类里面放入静态成员,感觉没啥意义!非静态是一定要实例化后才可引用的,那哪个非静态内部类实例化几次,那那个静态成员是怎么处理呢?