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中静态和非静态内部类之间的非语法区别是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

内部类和静态内部类有什么区别?

Java面试题|静态内部类和非静态内部类有什么区别?

静态内部类和非静态内部类的区别

静态内部类和非静态内部类的区别

深入浅析Java中Static Class及静态内部类和非静态内部类的不同

Java:静态与内部类[重复]