Java 对象构造和封装方法

Java Object Construction and Enclosing Method

我一直在寻找一本书或一些文档来更好地解释这里发生的事情:

System.out.println(">constructor>" + new Object().getClass().getEnclosingConstructor());

输出::>构造函数>null

然而,

System.out.println(">constructor>" + new Object(){/**/}.getClass().getEnclosingConstructor().toString());

输出::>构造函数>packageInformation.ClassConstructor()

我知道这与...可能...与静态初始化序列有关。

我的问题是:它是如何工作的,我在哪里可以阅读更多相关信息?

谢谢。

您可以在 javadoc for Class.getEnclosingConstructor:

中阅读相关内容

If this Class object represents a local or anonymous class within a constructor, returns a Constructor object representing the immediately enclosing constructor of the underlying class. Returns null otherwise.

由于 Object 不是匿名 class,因此在第一种情况下返回 null

new Object(){/**/} 创建一个匿名 class 扩展 Object 的实例,这就是返回非 null 值的原因,如果 new Object(){/**/}.getClass().getEnclosingConstructor() 是放置在构造函数中。