【问题标题】:Why can you call a method before it has been defined?为什么你可以在定义之前调用一个方法?
【发布时间】: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


【解决方案1】:

这是因为 Python 是在运行时编译的,而在 java 中编译器会处理这个问题(它会在整个代码中搜索声明)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多