返回信息流普通内部类里面为什么不能有static字段呢?
这是一条镜像帖。来源:北邮人论坛 / java / #39987同步于 2015/4/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
Java内部类
hunanmange
2015/4/14镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
“因为内部类特殊,他被定向为是和成员变量,方法一样的外部类成员
他必须跟外部类实例相关联才能初始化,这是他的特点之一,为了这个其他东西都要让路
而静态成员是不需要实例就初始化的
如果一个非静态内部类有了静态成员,静态成员不依托于任何内部类实例,那结果也就是此内部类不需要外部类实例就初始化了变量,严重侵害了内部类的定向”
【 在 hunanmange 的大作中提到: 】
: 普通内部类里面为什么不能有static字段呢?
吓得我滚回去读了一下Java Language Specification,上面如此规定,但没有说原因。
我猜应该是:内部类(Inner Class,也就是在一个类的内部定义的类,却本身不是static的)的意思是这个类“属于”外层的类的一个实例,但static的意思就是这个字段、方法“不属于任何实例”,意思互相冲突,所以干脆语言的层次禁止这样做。
Oracle的教程(https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html)如此说:“Also, because an inner class is associated with an instance, it cannot define any static members itself.”
看样子不少人问了这个问题:
http://stackoverflow.com/questions/1953530/why-does-java-prohibit-static-fields-in-inner-classes
http://stackoverflow.com/questions/12727252/why-static-fields-not-final-is-restricted-in-inner-class-in-java
http://stackoverflow.com/questions/4976871/static-variables-in-non-static-inner-classes
看不懂。。。围观渣硕
【 在 xssd (江南西道|道西南江) 的大作中提到: 】
: “因为内部类特殊,他被定向为是和成员变量,方法一样的外部类成员
: 他必须跟外部类实例相关联才能初始化,这是他的特点之一,为了这个其他东西都要让路
: 而静态成员是不需要实例就初始化的
: ...................
通过『我邮2.0』发布
【 在 xssd 的大作中提到: 】
: “因为内部类特殊,他被定向为是和成员变量,方法一样的外部类成员
: 他必须跟外部类实例相关联才能初始化,这是他的特点之一,为了这个其他东西都要让路
: 而静态成员是不需要实例就初始化的
: ...................
有道理,懂了,哈哈
【 在 xssd 的大作中提到: 】
: “因为内部类特殊,他被定向为是和成员变量,方法一样的外部类成员
: 他必须跟外部类实例相关联才能初始化,这是他的特点之一,为了这个其他东西都要让路
: 而静态成员是不需要实例就初始化的
: ...................
bd
【 在 xssd 的大作中提到: 】
: “因为内部类特殊,他被定向为是和成员变量,方法一样的外部类成员
: 他必须跟外部类实例相关联才能初始化,这是他的特点之一,为了这个其他东西都要让路
: 而静态成员是不需要实例就初始化的
: ...................
精辟的解释