在这里,我试图使用内部静态帮助器类为数据库连接实现一个单例类:

package com.myapp.modellayer;

public class DatabaseConnection {

    private DatabaseConnection() {
        //JDBC code...
    }

    private static class ConnectionHelper {
        // Instantiating the outer class
        private static final DatabaseConnection INSTANCE = new DatabaseConnection();
    }

    public static DatabaseConnection getInstance() {
        return ConnectionHelper.INSTANCE;
    }
}

但是,我的疑问是何时将这个静态内部类 ConnectionHelper 加载到JVM内存中:

在加载 DatabaseConnection 类时,或者
何时调用 getInstance()方法?

最佳答案

当类被加载时,只是实现细节。您想知道何时初始化该类。仅在第一次需要它(即调用getInstance())时,它将被初始化。

BTW使用的是lazy initialization holder class idiom,它正是基于Java语言规范的这种保证。正如乔什·布洛赫(Josh Bloch)所说,

07-24 19:26