6

可能重复:
Java 内部类和静态嵌套类

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

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

谢谢!

4

1 回答 1

6

差异远不止于此。static内部类可以从外部创建class,没有类的实例,非静态类不能。

您可以访问封闭类成员的事实是这样的结果,因为static内部类未绑定到封闭类的实例,但非绑定类static

于 2012-05-19T10:39:56.797 回答