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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 暴风 中级黑马   /  2014-10-13 00:21  /  1420 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内部类中一旦有静态成员,内部类也必须是静态成员。为什么,这其中的内存中运行的机制是什么

6 个回复

倒序浏览
原因很简单啊,静态成员是共享数据,可以用类名直接访问,当内部类中有静态成员的时候,外部类可以直接访问到,但肯定要通过内部类,如果内部类不是静态的,怎么用类名调用呢?这也是静态只能访问静态的一种体现
回复 使用道具 举报
刘家斌 发表于 2014-10-13 00:39
原因很简单啊,静态成员是共享数据,可以用类名直接访问,当内部类中有静态成员的时候,外部类可以直接访问 ...

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

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

内部类初始化?
回复 使用道具 举报
踏云 中级黑马 2014-10-15 00:08:09
7#
java原则:static 修饰的东西是通过类可以直接创建的。
内部类中有static的成员,而且内部类又是非静态的话就会矛盾(非静态要创建对象才能访问而,内部类又有静态的成员)

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