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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐炯 中级黑马   /  2012-5-28 08:31  /  2327 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

毕老师说,如果在内部类中定义了静态成员,则内部类也必须是静态的。这是为什么呢?我们在一个非静态类中不是也可以定义一个静态成员吗?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
   我是这么理解的。
   静态 就是 没有实例化 就可以直接用类名去 引用的 成员。
  如果这个内部类不是静态的,你在这个类里面定义了静态的变量,
  连这个内部类都不能直接用外部类名去引用,
  那你在里面定义内部变量就没有意义了。
  如果一调用外部类,里面的静态方法会自动的加载到了静态方法区,但是当内部类的静态方法加载时, 就会产生了歧义,因为内部类不是静态的.
   如果还是不理解可以去看下这个帖子http://bbs.itheima.com/forum.php ... amp;page=1#pid88334

评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
徐炯 + 10
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报

如果类中定义了一个静态的成员变量,那么它的生命周期是要长于内部类的。这样会出现问题。
回复 使用道具 举报
那是因为你现在的这个内部类是在外部类的成员位置上,需要有外部类对象了才能建立使用内部类,你静态成员类加载的时候就进内存,此时你内存都没有对象和非静态数据,所以两者是相矛盾的。你说的一个非静态类可以定义静态成员那是因为那个类不是封闭的,类文件加载的时候静态成员就被加载到内存方法区了,一点都不影响程序执行。
回复 使用道具 举报
我是这样理解的
当外部类加载的时候, 静态变量就已经存在了,而这个时候你的内部都还没有存在,这是不合理的。需要在外部类加载的时候内部类就存在,所以就设为静态的。
回复 使用道具 举报
内部类分为:
实例内部类
局部内部类
静态内部类
匿名内部类

静态修饰的东西,都是依赖的是类。类加载的时候,静态修饰的东东就加载到内存中。你在非静态内部类中申明了静态成员。相当于限制了静态成员的加载时机。静态内部类就是为了这个种情况产生的。
即:外部类在加载的时候,静态内部类同时也在加载到了内存中,当然静态成员也在加载到了内存中;
总之:同意楼上说法;
回复 使用道具 举报
徐炯 中级黑马 2012-5-28 20:25:18
7#
马林贺 发表于 2012-5-28 08:34
我是这么理解的。
   静态 就是 没有实例化 就可以直接用类名去 引用的 成员。
  如果这个内部类不是静 ...

回答的很好,谢谢!
回复 使用道具 举报
徐炯 发表于 2012-5-28 20:25
回答的很好,谢谢!

  互相学习,只是一个初步的了解,要是能应用到实际编辑就更好了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马