JAVA【为什么非静态的内部类不能有静态的成员呢?】

来源:百度知道 编辑:UC知道 时间:2024/06/09 10:07:40
如题~
非静态外部类可以有静态成员,而非静态内部类就不能有静态成员了
为什么?
请从本质上说明一下吧!谢谢了!
ljjava说的对,但是zfcdoudou解释的不是很明白
静态的内部类不需要实力话外部类的,静态内部类的内部方法也是不需要外部类的!

问题就处在非静态上面,如果一个非静态的内部类有了一个静态的方法,会提示:只有在顶级类或者静态内部类中才能生命静态方法。。。

其他几位也感谢你们的回答,但是自己明白的时候在帮助别人也是负责的表现~

楼上说的没错,是内存分配导致的。

这么说吧,静态的对象,在内存中实默认实例化的,在加载的时候就会存放到内存中。
也就是可以直接调用而不需要手动实例化。

理解这个就不难理解楼主说的问题了。
首先内部的静态类他是不能直接被实例化的。你必须实例化外部类才能实例化它。而外部类不是默认加载的,他只有在手动实例化之后才有内存分配。

这时问题出现了。既然静态对象是默认加载,那么静态内部类应该先于外部类被加载到内存中。

那么这是又和我们之前的一个结论相反(首先内部的静态类他是不能直接被实例化的。你必须实例化外部类才能实例化它。)所以这种写法是错误的。

内部类可能是私有的吗?可能是无名的吗?其它类(非双亲类)如何引用这样的内部类的静态成员呢?jdk如何为这样的成员分配内存呢?

静态成员是个死规定 例如:如果把中国人姓张定位静态 那么所有的中国人都姓张。非静态内部类如果有静态成员了 那么这个成员就不能改变 这样的程序很不灵活

在实例对象时根据内存分配的规则所致

.....
首先我从来没用过内部类

下面是我所想的:

非静态外部类 这个是什么意思? 首先外部类是什么? 解释下...

非静态内部类 个人觉得它既然是在内部 那么他应该是这个类的一个属性 那么我们知道类里面存在两种属性,类变量(即静态变量)还有对象变量(属性或字段) .既然这个内部类是一个属性的话 如果是静态的 它属于类 当然可以存在静态变量.但是如果是对象,他里面自然不可以存在静态变量.因为它是属于对象的属性.对象是可以调用静态属性.但不可以声明静态变量.而类是可以声明对象以及静态变量 但无法调用对象变量 就好象我们认识国家领导.但是国家领导未必认识我们一样

总之 就这么着吧...