【发布时间】:2012-03-04 00:30:38
【问题描述】:
enter link description here如果您有一堆类都相互引用并使用彼此的方法,那么 java 编译器如何管理如此快速地解析类间引用?
我知道 C++ 编译器在这方面是如何工作的:每个 .cpp 文件都是单独编译的,它们使用那些糟糕的 .h 文件来声明类字段/方法,因此每次都重新解析同一组文件并且/ 或编译器必须支持预编译的头文件。
但是 Java 不这样做,并且类接口/实现的程序源中没有像 Turbo Pascal 将它们分开的方式。
我可以看到,如果你有一个类 Foo 并且它引用类 Bar、Baz、Quux 都在一个单独的 barbazquux.jar 文件中,那么事情就很简单了:.jar 文件已经被编译了,所以当 Foo.java 被编译时,它可以去查看 barbazquux.jar 中的 .class 文件。
但是如果你有循环类引用,并且类 Foo 引用类 Bar 引用类 Foo,它如何编译 Foo.java 而不必先编译 Bar.java 然后决定它必须编译 Foo.java 并得到陷入循环?
Java 编译器如何处理类间引用?
编辑:yair 指出another question 的答案含糊地提到了多通道编译器。好的,所以有多个通行证。每次传递到底发生了什么,Java 是如何快速编译的?它是否必须在每次传递时重新解析每个文件,还是存储抽象语法树以节省时间,还是什么?
【问题讨论】:
-
...这个概念叫什么,如果我选择查看一些编译器书籍可以了解更多信息?
-
看起来像已回答的 dup 问题。见here。
-
我猜,但这个问题并没有真正能说明问题的答案。
-
请避免通过添加新问题来扩大问题的范围。最后一个编辑添加了关于性能的问题,这意味着这个问题现在对未来的访问者的价值非常低,因为他们不能确定要回答什么,也不能确定哪些答案是最好的,因为有多种理由可以投票。跨度>
标签: java compiler-construction language-design