考虑以下代码
public class myClass{
myClass instanceOfNotYetDefinedClass;
... //etc code
}
我不明白编译器是如何理解这一点的:我告诉它创建一个类,然后它说:“好吧!让我看看这个 myClass 类有什么。哦,它是一个 myClass,让我看看这是什么……”等等。
这可能是一个相当菜鸟的问题,但我真的不明白如何处理这个问题。
最佳答案
要查看编译器的作用,请使用 javac 编译该类并在其上运行 javap。在您的类(class)中执行此操作会得到以下结果:
public class myClass {
myClass instanceOfNotYetDefinedClass;
public myClass();
}
public myClass();
是默认构造函数,与此处无关。由此,我们可以看到编译器只是将一个myClass
类型的字段附加到myClass
上。这是如何运作的?由于 myClass
是代码范围内的现有类,因此编译器知道它将在运行时定义。因此,它简单地保留了这个定义。在运行时,调用 myClass.instanceOfNotYetDefinedClass
会为您提供字段的值 - 如果您未初始化它,则为 null
,或者为 myClass
实例有自己的领域。这里不存在无限递归或冲突,除非你让它发生,例如在构造函数中调用 new myClass()
。
关于java - 当 Java 编译器内部有一个类 `c` 时,它如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36961122/