java - 当 Java 编译器内部有一个类 `c` 时,它如何工作?

标签 java compilation

考虑以下代码

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/

相关文章:

java - 无法使用 "&"作为 Android Studio 中按钮的文本属性

c - 将包含目录添加到 gcc *before* -I

java - 如何更改 Maven 构建目录?

c++ - 如何链接到与 linux 中不同版本的 boost 链接的共享库

c++ - 如果我的类成员的类型与类型匹配,如何进行编译时 type_check 并只编译我的类的一部分?

Java二进制搜索递归

java - Android开发者文档IntentService : Are we defining the same class twice?

c - 替换入口点函数会导致段错误

java - RxJava 发出多个错误

wsdl - 用于在句法上比较 WSDL 元素的 Java 库