当前位置: 技术问答>java相关
出200分(或更多),就non-static inner class请教java高手
来源: 互联网 发布时间:2015-09-04
本文导语: java中规定non-static inner class不能包含static字段和方法(编译时常量除外)。 我查遍了CSDN的帖子(有一篇完全一样的问题,有个朋友用类装载和初始化的原因上分析了,但我觉得即使装载初始化static成员时发现内部...
java中规定non-static inner class不能包含static字段和方法(编译时常量除外)。 我查遍了CSDN的帖子(有一篇完全一样的问题,有个朋友用类装载和初始化的原因上分析了,但我觉得即使装载初始化static成员时发现内部类不是static的,也应该会搜索内部类的成员中是否有static成员,编译时常量能在非静态内部类中定义就说明了这个问题),也用google对相关内容搜索了近2个小时,可是还是没有找到明确 的原因。既然有这样的规定,必然有其道理,请各位高手给我解释一下好吗,谢谢了。 心里有个结总是很让人不舒服:)。 如果解释的合理,想要分我还可以开帖的:)谢谢大家,提帖也给分。
|
Inner classes ,unless static ,have an implicit reference to the enclosing instance.The enclosing instance must be provided to the new call that constructs the inner class.In many cases,innerclass are constructed inside instance methods of the enclosing class.in which case this.new is implied by new
|
qxjavajava(射手座) 说的有道理。
非静态类中,可以有静态方法,但是也可以有非静态方法,如果两者都有的话,
在调用非静态方法的时候,就会发生new的冲突,所以java为了避免这种混淆,所以就不允许在非静态方法中使用静态的方法和变量
非静态类中,可以有静态方法,但是也可以有非静态方法,如果两者都有的话,
在调用非静态方法的时候,就会发生new的冲突,所以java为了避免这种混淆,所以就不允许在非静态方法中使用静态的方法和变量
|
对了,是我弄错了,和和,提示:仅仅定级class才能拥有static method.
|
我觉得:想要调用非静态内部类,就要先实例化,这是就会和其中的static相矛盾。
|
其实你可以这样理解,inner class顾名思义就在一个类里面的类,所以,可以把内部类看成是类的一个成员方法,而成员方法是不能定义静态变量的。这样的解释可能是比较可以的了。
|
果然是个经典的问题,不过我觉得这应该问一问java的最初设计者。
|
我也想知道是否有更好的例子说明,更好的解释。