【发布时间】:2017-07-09 10:03:46
【问题描述】:
public class MainClass {
public static void main(String[] args) {
anotherTest();
test();
}
public static void test() {
System.out.println("Printed from the test method.");
}
public static void anotherTest() {
System.out.println("Printed from the anotherTest method.");
}
}
我想知道为什么你可以在方法被定义之前调用它,就像上面的代码一样。上面的代码在页面底部显示了两个方法,但我在加载它们之前在 main 方法中调用它们。如果我在 Python 中做类似的事情,我会得到一个错误。
【问题讨论】:
-
因为编译和执行是不同的步骤。
-
而且 Java 不是 Python。有不同的语言规则。
-
与其他语言一样,每个程序都必须遵循层次结构的步骤。静态方法/变量在运行时加载
-
@Ksai 如果在运行时加载静态方法,那么这意味着将首先加载主要方法。如果先加载 main 方法,在没有加载其他静态方法的情况下,不会执行里面的所有内容吗?
-
这实际上是一个非常好的问题(尽管我怀疑在 Stack Overflow 的某个地方一定已经有一个非常好的答案)。简而言之:Java 是一种编译语言,因此整个源代码在执行之前都经过编译(分析并转换为较低级别的可执行代码)。因此,到执行发生时,编译器已经生成了整个类、方法等集合的映射,并且知道在哪里可以找到任何被调用的有效方法,而不管代码的顺序如何。另一方面,Python 是一种“解释性语言”,可以从头到尾阅读。
标签: java compilation