Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在定义方法之前可以调用它?_Java_Compilation - Fatal编程技术网

Java 为什么在定义方法之前可以调用它?

Java 为什么在定义方法之前可以调用它?,java,compilation,Java,Compilation,我想知道为什么您可以在像上面的代码一样定义方法之前调用它。上面的代码在页面底部显示了两个方法,但我在加载它们之前在main方法中调用它们。如果我在Python中做类似的事情,我会得到一个错误。这是因为Python是在运行时编译的,而在java中,编译器处理这个问题,它在整个代码中搜索声明,因为编译和执行是不同的步骤。java不是Python。有不同的语言规则。和其他语言一样,每个程序都必须遵循一系列步骤。静态方法/变量在runtime@Ksai如果在运行时加载静态方法,那么这意味着将首先加载主方

我想知道为什么您可以在像上面的代码一样定义方法之前调用它。上面的代码在页面底部显示了两个方法,但我在加载它们之前在main方法中调用它们。如果我在Python中做类似的事情,我会得到一个错误。

这是因为Python是在运行时编译的,而在java中,编译器处理这个问题,它在整个代码中搜索声明,因为编译和执行是不同的步骤。java不是Python。有不同的语言规则。和其他语言一样,每个程序都必须遵循一系列步骤。静态方法/变量在runtime@Ksai如果在运行时加载静态方法,那么这意味着将首先加载主方法。如果先加载main方法,那么在没有加载其他静态方法的情况下不会执行其中的所有内容吗?这实际上是一个非常好的问题,尽管我怀疑在堆栈溢出的某个地方已经有了一个非常好的答案。简而言之:Java是一种编译语言,因此在执行之前,整个源代码都经过编译、分析并转换为较低级别的可执行代码。因此,当执行发生时,编译器已经生成了一整套类、方法等的映射,并且知道在哪里可以找到任何被调用的有效方法,而不管代码的顺序如何。另一方面,Python是一种解释性语言,从头到尾都在阅读。
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.");
    }
}