A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© whocases 黑马帝   /  2012-6-2 21:02  /  2956 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么非静态内部类里不能有静态成员呢?求解~~~

4 个回复

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

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
      lz说的应该是内部类定义在了局部位置时的情况

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

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

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
应该是定死了的,你先记住就好
内部的静态类应该是不能直接被实例化.
静态成员变量需要在一开始就分配内存进行初始化,而一般的类成员只是在类实例化的时候才会为止分配内存初始化.

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马