Java中静态和非静态内部类之间的非语法区别是啥? [复制]
Posted
技术标签:
【中文标题】Java中静态和非静态内部类之间的非语法区别是啥? [复制]【英文标题】:What are the non-syntactic differences between static and non-static inner classes in Java? [duplicate]Java中静态和非静态内部类之间的非语法区别是什么? [复制] 【发布时间】:2012-05-26 17:22:50 【问题描述】:可能重复:Java inner class and static nested class
静态内部类的实例不能访问其封闭类的实例成员,而非静态内部类的实例可以。这就是我所说的句法差异。因为是否声明一个内部类是静态的,就决定了你程序的语法是否正确。
但是还有其他不属于 Java 语法的区别吗?假设 A 类是***类,B 类是 A 的内部类。如果我不打算在 B 中访问 A 的实例成员,那么我应该将 B 声明为静态的。但由于我不需要这样做,我可以将 B 声明为非静态的,并且不会出现编译错误。那么在这种情况下,是否有任何差异,可能是生成的字节码,或者任何运行时差异?
谢谢!
【问题讨论】:
***.com/questions/70324/… 这更好地解释了它。浏览这篇文章的所有线程/cmets。 这不是句法上的差异,而是语义上的差异。语法有效。否则你会得到一个语法错误。你没有,你得到一个语义错误。 【参考方案1】:差异远不止于此。 static
内部类可以从class
外部创建,没有类的实例,非静态类不能。
您可以访问封闭类成员的事实是这样的结果,因为static
内部类未绑定到封闭类的实例,但非static
绑定。
【讨论】:
以上是关于Java中静态和非静态内部类之间的非语法区别是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章