黑马程序员技术交流社区

标题: Java内部类的疑问 [打印本页]

作者: 段光宇    时间: 2013-11-15 19:45
标题: Java内部类的疑问
已经知道内部非静态类中可以随意访问外部类的各个成员或成员函数,那么内部静态类为什么不能访问呢?内部静态类有什么作用,网上找不到满意的解答啊,大神们来解决下
作者: 习嘻嘻    时间: 2013-11-15 20:32
静态只能访问静态的,只能访问外部内的静态成员。
只知道内部类静态修饰后,可以直接外部类名使用,在创建内部类对象是new Outer.Inner()
作者: 胡乃锋    时间: 2013-11-15 20:55
首先static的成员是在类加载的时候初始化的,而非static的成员是在创建对象的时候,通过new 创建对象的时候才初始化的,静态成员属于类成员,不需要生成对象就存在了.而非静态需要生成对象才产生.
所以静态成员不能直接访问.  
如果 你在静态内部类 先new 创建外部类对象,然后再用该对象操作外部成员的话就不会出错
作者: spiderman    时间: 2013-11-15 21:09
你的问题我给分出来讲解一下
1.内部静态类为什么不能访问外部类的成员呢?
答:可以访问外部类的静态成员,不能访问非静态成员。至于原因,那就是静态和非静态成员的内存位置和加载时间不一样。就好像你跟朋友约定去一个地方,他在1楼,你在2楼,你能找到他吗?他在1点去的,然后2点走了,你在3点去的时候能找到他吗?
2.内部静态类有什么作用?
至于有什么用,我说不好。反正内部类的出现,就是为了更方便访问外部类的成员,比如私有的成员。而定义成静态的目的,一般是为了不创建对象就能使用这个成员...具体有什么用,很抽象...看你的实际需求了...
还是拿毕老师的心脏和人的关系,心脏就相当于内部类,心脏就可以更方便的访问内部的属性,至于静态内部类的话,就相当于医生在了解心脏的构造的时候,不可能每次都拿个人类的心脏吧,用一个模型的心脏就可以了解,这个模型心脏,就相当于静态内部类。。。

例子可能不是很恰当,但是这是我能想到了的,仅供你参考
作者: 付凯鹏    时间: 2013-11-15 21:58
内部静态类属于类本身,不属于外部类的某个对象,因此不能访问外部类的非静态成员,使用静态内部类的目的和使用内部类相同。如果一个内部类不依赖于其外部类的实例变量,或与实例变量无关,则选择应用静态内部类。




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