gpt4 book ai didi

java - 内部类的默认构造函数是否需要外部类的对象?

转载 作者:行者123 更新时间:2023-11-30 06:57:55 26 4
gpt4 key购买 nike

我在摆弄 java,我创建了两个类,OuterInner

public class Outer {
public class Inner {
}
}

内部类使用默认构造函数。我可以通过调用非参数默认构造函数 new Inner()Outer 中创建 Inner 类的新实例。但是当我尝试使用反射做同样的事情时,我注意到构造函数需要 Outer 类型的对象。

这是否意味着内部类默认构造函数不是非参数?为什么正常调用构造函数和反射不相交?

最佳答案

“以正常方式调用构造函数和反射之间没有不相交”,只有从 Outer 类内部调用构造函数和从 Outer 类外部调用构造函数之间存在差异。

因为 Inner 类不是static,所以它有一个对 Outer 的引用。如果你想从 Outer 的外部创建一个 Inner 的实例,你必须这样写:

Outer outerObj = new Outer();
Outer.Inner innerObj = outerObj.new Inner();

Inner的构造函数提供outerObj的要求与通过反射实例化Inner类时完全相同。唯一的区别是语法将 outerObj 放在运算符 new 的左侧,而反射将 outerObj 传递给构造函数。 Java 编译器向它自动生成的构造函数添加一个隐藏参数,其方式与它向生成的类添加一个隐藏字段以保存对 Outer 对象的引用的方式相同。

请注意,这仅适用于非静态内部类。当您的内部类是 static 时,没有隐藏参数和隐藏字段,因此反射允许您创建内部类的实例而无需 Outer 对象。

关于java - 内部类的默认构造函数是否需要外部类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33167281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com