【发布时间】:2020-08-15 13:33:11
【问题描述】:
- 在我们实际运行程序之前,Java 编译器知道什么? (我们在 IDE 中键入程序时会检查哪些内容,以及在运行时检查哪些内容?)
例如A)据我所知,常量值会在 IDE 的源代码中立即评估(当我们键入它们时),而对于变量,编译器仅检查变量是否可访问和/或变量的类型兼容性但不会立即加载变量的实际值。它在运行时完成。 例如B) 在编译时检查重载,但在运行时(部分)检查覆盖。
- 是否有任何其他此类示例和/或任何标准/规则可供编译器决定是否应在编译时或运行时检查特定类型的代码?
我也尝试过阅读一些书籍和 Java 文档,但找不到满意的答案。
【问题讨论】:
-
您似乎将编译器与 IDE 混淆了,但它们是不同的组件。 IDE 也会复制编译器所做的一些检查,以便向用户提供快速反馈。
-
另外,Java 编译器在运行时什么也不做。除非你调用它来编译其他源代码,但这与你自己已经编译的代码是分开的。
-
java编译器是怎么看源代码的? 对于传统的编译器来说,代码在一个文件中,编译器在其上给出文件名命令行。对于 IDE,这取决于 IDE——如果它有自己的内置编译器,它可以发明它喜欢的任何机制,但文件是最简单的。但我不使用 IDE,所以我从来没有看过。至于其他的,您似乎对 IDE、编译器和运行时的相对角色感到困惑。
-
我可能没有正确地提出这个问题。考虑一下,我们没有使用 IDE。现在,什么东西会抛出编译时错误,什么东西不会抛出编译时错误但会在运行时抛出异常? Java编译器如何区分这些东西?是否有任何特定标准?
标签: java compiler-construction