我正在阅读Java中的静态方法和变量,我发现了以下两篇关于堆栈溢出的文章。
Are static methods in Java always resolved at compile time? 这就是说,静态方法在编译时得到解决。
when is static variable loaded in java, runtime or compile time?时间或编译时间
这就是说,静态方法是在编译时加载的。
编译器在解析它们时(例如在编译时)不应该加载静态变量/方法吗? 令人困惑!有人可以澄清一下吗?
答案 0 :(得分:6)
在我看来,您对“解决”和“加载”这两个术语的含义感到困惑。
解析方法/变量意味着确切地确定调用哪个方法/变量。例如,方法在运行时完成,这导致子类覆盖超类的方法(多态)的能力。但是静态方法无法覆盖并在编译时解析。
加载变量意味着实际将值存入内存。当然,这只能在运行时发生。具体来说,在加载类本身时会加载一个静态变量。