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

What are the non-syntactic differences between static and non-static inner classes in Java?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Java inner class and static nested class

静态内部类的实例无法访问其封闭类的实例成员,而非静态内部类的实例可以访问。这就是我所说的句法差异。因为声明一个内部类是否是静态的决定了程序的语法是否正确。

但是有什么不同之处不是Java语法的一部分吗?假设A类是顶级类,B类是A的内部类,如果我不想访问B中A的实例成员,那么我应该声明B是静态的。但是由于我不需要这样做,我可以声明b是非静态的,并且不会有编译错误。因此,在这种情况下,是否有任何差异,可能是在生成的字节码中,还是在运行时有任何差异?

谢谢!


差别比那大。static内部类可以从class外部创建,没有类的实例,非静态类不能。

之所以可以访问封闭类成员,是因为static内部类不绑定到封闭类的实例,而非static内部类是。