【问题标题】:Java static methods variables resolved during compile time, loaded during run time?Java静态方法变量在编译时解析,在运行时加载?
【发布时间】:2012-10-16 22:37:51
【问题描述】:

我在阅读 Java 中的静态方法和变量时发现以下两篇关于堆栈溢出的文章。

Are static methods in Java always resolved at compile time? 这就是说,静态方法是在编译时解析的。

when is static variable loaded in java, runtime or compile time?时间或编译时间

也就是说,静态方法是在编译时加载的。

编译器在解析静态变量/方法时是否应该加载它们(比如在编译时)? 令人困惑!有人可以澄清一下吗?

【问题讨论】:

  • 确实如此。两个答案都只说Compile-Time。你对什么感到困惑?
  • 如果你想在真正需要的时候解决方法/类,你必须创建一个对象。但是如果你仍然想要一个静态的访问,你可以使用 sinlgeton 模式,在这里描述:en.wikipedia.org/wiki/Singleton_pattern
  • 为什么人们关心编译/运行时间?这是 impl 细节。

标签: java time static compilation


【解决方案1】:

在我看来,您对“解决”和“加载”这两个术语的含义感到困惑。

解析一个方法/变量意味着准确地决定调用哪个方法/变量。例如,实例方法是在运行时完成的,这导致子类能够覆盖超类的方法(多态性)。然而,静态方法不能被覆盖并在编译时解析。

加载变量意味着实际上将值放入内存。当然,这只能在运行时发生。具体来说,在加载类本身时会加载一个静态变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多