黑马程序员技术交流社区

标题: 关于内部类中静态成员的问题 [打印本页]

作者: 徐炯    时间: 2012-5-28 08:31
标题: 关于内部类中静态成员的问题
毕老师说,如果在内部类中定义了静态成员,则内部类也必须是静态的。这是为什么呢?我们在一个非静态类中不是也可以定义一个静态成员吗?
作者: 马林贺    时间: 2012-5-28 08:34
   我是这么理解的。
   静态 就是 没有实例化 就可以直接用类名去 引用的 成员。
  如果这个内部类不是静态的,你在这个类里面定义了静态的变量,
  连这个内部类都不能直接用外部类名去引用,
  那你在里面定义内部变量就没有意义了。
  如果一调用外部类,里面的静态方法会自动的加载到了静态方法区,但是当内部类的静态方法加载时, 就会产生了歧义,因为内部类不是静态的.
   如果还是不理解可以去看下这个帖子http://bbs.itheima.com/forum.php ... amp;page=1#pid88334
作者: 贾旭    时间: 2012-5-28 08:37

如果类中定义了一个静态的成员变量,那么它的生命周期是要长于内部类的。这样会出现问题。
作者: 丰亚彬    时间: 2012-5-28 08:39
那是因为你现在的这个内部类是在外部类的成员位置上,需要有外部类对象了才能建立使用内部类,你静态成员类加载的时候就进内存,此时你内存都没有对象和非静态数据,所以两者是相矛盾的。你说的一个非静态类可以定义静态成员那是因为那个类不是封闭的,类文件加载的时候静态成员就被加载到内存方法区了,一点都不影响程序执行。

作者: 黄克帅    时间: 2012-5-28 09:58
我是这样理解的
当外部类加载的时候, 静态变量就已经存在了,而这个时候你的内部都还没有存在,这是不合理的。需要在外部类加载的时候内部类就存在,所以就设为静态的。
作者: whocases    时间: 2012-5-28 14:46
内部类分为:
实例内部类
局部内部类
静态内部类
匿名内部类

静态修饰的东西,都是依赖的是类。类加载的时候,静态修饰的东东就加载到内存中。你在非静态内部类中申明了静态成员。相当于限制了静态成员的加载时机。静态内部类就是为了这个种情况产生的。
即:外部类在加载的时候,静态内部类同时也在加载到了内存中,当然静态成员也在加载到了内存中;
总之:同意楼上说法;

作者: 徐炯    时间: 2012-5-28 20:25
马林贺 发表于 2012-5-28 08:34
我是这么理解的。
   静态 就是 没有实例化 就可以直接用类名去 引用的 成员。
  如果这个内部类不是静 ...

回答的很好,谢谢!
作者: 马林贺    时间: 2012-5-28 22:31
徐炯 发表于 2012-5-28 20:25
回答的很好,谢谢!

  互相学习,只是一个初步的了解,要是能应用到实际编辑就更好了。




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