gpt4 book ai didi

java - java 编译器对于类定义中对该类的引用做了什么?

转载 作者:行者123 更新时间:2023-12-01 13:35:43 25 4
gpt4 key购买 nike

这可能是一个非常原始的问题,但却是我从未关注过的。在下面的类定义中,当编译器看到类变量 left 的类型为 BinaryNode 时,它会做什么,因为没有读取类 BinaryNode 的整个定义 还没有(编译器处理变量 left 时 BinaryNode 尚未定义)?

我的意思是为什么这里不会发生无限递归。

public class BinaryNode {
public int key;
public BinaryNode left;
public BinaryNode right;

public BinaryNode(int key){
this.key = key;
}

}

最佳答案

如果数据结构是无限的,例如你可以这样做:

ArrayList<Object> list=new ArrayList<>();
list.add(list);

没有问题。因此,在编译器中创建引用自身的类描述是没有问题的。类描述此时可能不完整,稍后会完成,就像上面的列表在添加自身后可以填充更多元素一样。

重要的一点是,编译器没有尝试遍历整个引用图的操作。并且在编译器内不需要这样的遍历。

因此,如果您编译一个引用类 B 的类 A,该类 B 使用类 C,则不一定需要触及类 C。如果 B==C 甚至 B==A,则同样适用。

关于java - java 编译器对于类定义中对该类的引用做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21291322/

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