黑马程序员技术交流社区

标题: 求高手指教 :静态内部类 [打印本页]

作者: 暴风    时间: 2014-10-13 00:21
标题: 求高手指教 :静态内部类
内部类中一旦有静态成员,内部类也必须是静态成员。为什么,这其中的内存中运行的机制是什么

作者: 刘家斌    时间: 2014-10-13 00:39
原因很简单啊,静态成员是共享数据,可以用类名直接访问,当内部类中有静态成员的时候,外部类可以直接访问到,但肯定要通过内部类,如果内部类不是静态的,怎么用类名调用呢?这也是静态只能访问静态的一种体现
作者: 暴风    时间: 2014-10-13 02:52
刘家斌 发表于 2014-10-13 00:39
原因很简单啊,静态成员是共享数据,可以用类名直接访问,当内部类中有静态成员的时候,外部类可以直接访问 ...

内部类的静态与否,与它内部的成员的调用有关系吗?即使内部类不是静态的,也可以通过类名调用它内部的的静态成员(这不类似对于一个普通类,其内部的静态成员的调用,直接一个类名.方法名();就可以的,而不必这个类是静态的),内部类作为外部类的一个成员,它的静态与否,直接后果是:在外部类的类外可否访问它的内部类。所以你的解释,似乎,没有因果关系吧!!!
作者: Quasimodo    时间: 2014-10-13 03:14
应该从另一个角度想:非静态内部类为什么不能有静态成员
静态成员不用建立对象就能直接被类名引用。
如果我们想引用内部类中的成员,由于内部类是非静态的,那么就得先建立外部类的对象,这样内部类也会被初始化。这样给内部类里的成员加静态就没有任何意义了。
然后,java语言中就是规定的非静态内部不能有静态类。
作者: 刘家斌    时间: 2014-10-13 09:34
暴风 发表于 2014-10-13 02:52
内部类的静态与否,与它内部的成员的调用有关系吗?即使内部类不是静态的,也可以通过类名调用它内部的的 ...

内部类在这里作为外部类的成员,如果不是静态,你怎么可以在外部直接调用?
作者: 暴风    时间: 2014-10-14 23:57
Quasimodo 发表于 2014-10-13 03:14
应该从另一个角度想:非静态内部类为什么不能有静态成员
静态成员不用建立对象就能直接被类名引用。
如果我 ...

内部类初始化?

作者: 踏云    时间: 2014-10-15 00:08
java原则:static 修饰的东西是通过类可以直接创建的。
内部类中有static的成员,而且内部类又是非静态的话就会矛盾(非静态要创建对象才能访问而,内部类又有静态的成员)

至于你说的内存结构,这个只是一个概念,不是很清楚你想问的是什么
如果只是静态非静态的话我还可以解释下:
静态的东西是类一加载就存在于neicun方法区中的,而非静态的是需要到创建对象才有的。
非静态的方法是在内存栈中的,而非静态的成员属性是在对象中也就是堆中的





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