【问题标题】:How does java compiler allow a class to have its own type reference? [duplicate]java编译器如何允许一个类有自己的类型引用? [复制]
【发布时间】:2021-06-04 10:45:14
【问题描述】:

我想知道下面的代码,

public class Abc {
    private Abc p;
}

当类被编译时,编译器如何知道ABC 类型,因为ABC 类型还没有出现。

我学习了 python,并了解了如何构建 python 类,

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

在上面的python代码中,名称Person被分配给相应的类对象,在该类中的所有变量和方法定义之后。

我想知道 java 类是如何在底层构建的,以及它如何包含自己类型的引用类型。

谁能给我一个深入的解释,或者给我一本很好的参考书,让我了解那些从幕后发生的事情?

【问题讨论】:

标签: java class


【解决方案1】:

请记住,在 Java 中,类变量只是一个引用变量。 所以已经“看到”了Abc 这个名字,它可以很容易地在第一次通过时解释它。

它没有义务这样做,但您可以想象一个编译器记录一个类型为 class 的符号,名称为 Abc,并且在首次声明时内部状态为“不完整”。 当它到达类变量时,它可以立即确定该类是否存在或将存在,这取决于您如何看待它。

这不会使单遍编译成为可能,但这是因为您可以按任何顺序声明方法,包括无法“单遍”编译的相互调用的方法。 在其他情况下,您可以在 Java 类中进行“前向”引用,这意味着它们并不总是可以单遍编译。

【讨论】:

  • 所以你是说在第一遍编译器可以创建一个class类型的符号,名称为ABC。然后当它解释实例变量的类型时,它会看到那个符号。
  • 你的意思是什么取决于你怎么看
  • @Clarke 我说的是一个标记为“不完整”的符号。就像不完整的东西是“存在”(但不完整)还是尚未“存在”(因为它不完整)但将会存在一样简单。
猜你喜欢
  • 2013-06-21
  • 2013-07-14
  • 1970-01-01
  • 2021-10-15
  • 2019-12-22
  • 2021-02-02
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
相关资源
最近更新 更多