栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

私有内部类的默认构造函数是否具有形式参数?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

私有内部类的默认构造函数是否具有形式参数?

实现和规范之间有区别。

我认为“除外” JLS声明

除了 非私有内部成员类…

措辞不佳。

这意味着, 不需要 编译器隐式声明一个表示该类的立即封闭实例的形式参数…但是 可以


为什么非私有内部成员类 需要 隐式形式参数?

从JLS
8.8.1开始

成员类可能是由与类实例创建表达式的编译器不同的编译器发出的。因此,创建表达式的编译器必须有一种标准方法将引用(表示立即封闭的实例)传递给成员类的构造函数

例如,如果我使用第一个编译器编译此内部类:

package p1;public class Ctors {    public class MyInner {    }}

如果我想用另一个编译器编译这个子类:

package p2;import p1.Ctors;public class SubCtors {    public SubCtors() {        new Ctors();    }}

第二个编译器必须能够将默认构造函数与形式参数一起使用。在这种情况下,带有一个

SubCtors
实例的封闭类的实例。


为什么在非私有内部成员类中 不需要 隐式形式参数?

因为非私有内部成员类始终由编译它的同一编译器访问。如您所示,无论类可见性如何,javac都会生成相同的构造函数,但这不是必需的。另一个编译器实现可以自由选择其他方式。

JLS
8.8.1还有一点,就是同一条线

在用于 本地类(不是在静态上下文中)
或匿名类的类实例创建表达式中,第15.9.2节指定了本地/匿名类的直接封闭实例。本地/匿名类必须由与类实例创建表达式相同的编译器发出。该编译器可以随心所欲地表示立即封闭的实例。
Java编程语言无需在本地/匿名类的构造函数中隐式声明参数。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/386952.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号