Java中静态和非静态内部类之间的非语法差异是什么?

时间:2012-05-19 10:37:50

标签: java static inner-classes non-static

  

可能重复:
  Java inner class and static nested class

静态内部类的实例不能访问其封闭类的实例成员,而非静态内部类的实例可以。这就是我的意思是句法差异。因为将内部类声明为静态是否确定程序的语法是否正确。

但是,是否还有其他差异不属于Java语法?假设A类是顶级类,B类是A的内部类。如果我不打算在B中访问A的实例成员,那么我应该声明B是静态的。但由于我不需要,我可以声明B是非静态的,并且不会出现编译错误。那么在这种情况下,是否有任何差异,可能是在生成的字节码或任何运行时差异?

谢谢!

1 个答案:

答案 0 :(得分:5)

差异大于此。可以在static之外创建class内部类,而不需要类的实例,非静态类不能。

您可以访问封闭类成员的事实是这样的,因为static内部类没有绑定到封闭类的实例,而是非static实例。