在 Java 中使用内部类延迟加载变量是如何工作的?

问题描述 投票:0回答:0

希望你一切顺利。 我目前正在尝试理解以下代码片段,它显然是我在代码片段中创建的 LazyHolder 类的属性单例的延迟加载示例:

class Singleton {
  // My private inner class containing my future lazy loading attribute
  private static class LazyHolder {
    private static Singleton singleton = new Singleton();
  }

  public static Singleton getSingleton() {
    return LazyHolder.singleton;
  }
}
class Main {
  public static main(String[] args) {
    Singleton s = Singleton.getSingleton();
  }
}

根据我一直关注的一些在线课程,将在以下行创建私有静态单例实例:

Singleton s = Singleton.getSingleton()

但我不同意。对我来说,因为私有静态属性

singleton
static
。该属性将在
LazyHolder
类定义期间创建,因为它是静态的...

所以我的问题是:

LazyHolder
类是什么时候真正创建的?是在创建
Singleton
类的时候创建的,因为
LazyHolder
Singleton
类的一个属性,还是在我们进入
getSingleton()
类的
Singleton
方法时创建的?

我真的很感激对运行时执行期间发生的事情的解释。

java design-patterns singleton lazy-loading inner-classes
© www.soinside.com 2019 - 2024. All rights reserved.