我在阅读有关 Java 中的静态方法和变量的内容时,发现了以下两篇有关堆栈溢出的文章。
Are static methods in Java always resolved at compile time? 也就是说,静态方法在编译时解析。
when is static variable loaded in java, runtime or compile time?时间或编译时间
也就是说,静态方法是在编译时加载的。
编译器是否应该在解析静态变量/方法时(比如在编译时)加载它们? 令人困惑!有人可以澄清一下吗?
最佳答案
在我看来,您对“解析”和“加载”这两个术语的含义感到困惑。
解析方法/变量意味着准确决定调用哪个方法/变量。例如,实例方法是在运行时完成的,这导致子类能够覆盖父类(super class)的方法(多态性)。然而,静态方法不能被覆盖,而是在编译时解析。
加载变量实际上是将值存入内存。当然,这只能发生在运行时。具体来说,在加载类本身时加载静态变量。
关于Java静态方法变量在编译时解析,在运行时加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12924533/