【发布时间】:2012-05-26 17:22:50
【问题描述】:
静态内部类的实例不能访问其封闭类的实例成员,而非静态内部类的实例可以。这就是我所说的句法差异。因为是否声明一个内部类是静态的,就决定了你程序的语法是否正确。
但是还有其他不属于 Java 语法的区别吗?假设 A 类是顶级类,B 类是 A 的内部类。如果我不打算在 B 中访问 A 的实例成员,那么我应该将 B 声明为静态的。但由于我不需要这样做,我可以将 B 声明为非静态的,并且不会出现编译错误。那么在这种情况下,是否有任何差异,可能是生成的字节码,或者任何运行时差异?
谢谢!
【问题讨论】:
-
stackoverflow.com/questions/70324/… 这更好地解释了它。浏览这篇文章的所有线程/cmets。
-
这不是句法上的差异,而是语义上的差异。语法有效。否则你会得到一个语法错误。你没有,你得到一个语义错误。
标签: java static inner-classes non-static