在这里,我试图使用内部静态帮助器类为数据库连接实现一个单例类:
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)所说,