Singleton
创建 ClassLoader
个实例。与Singleton
不同,ClassLoader
会在遇到该类的对象创建时创建另一个对象,如果该类不是Singleton
。
我的问题是:每个会话的班级可以有'n'
个对象吗?
答案 0 :(得分:1)
在你可以“使用”一个类的实例之前,有三件事需要发生,每个实例需要分配堆内存:
需要加载和链接类字节码以解决对其他类的任何静态依赖性。 该类需要初始化。 需要创建类的实例。 类的加载和链接通常在启动JVM时发生,尽管它可以由JVM“懒惰地”完成,并且可以动态完成;例如使用Class.forName(...)。这是分配“代码”类的内存时。
类初始化通常在第一次实际使用类之前完成。 (具体细节见JLS)。这是在分配类静态的内存时。
使用新构造时会发生类创建。这也将触发尚未初始化的类的类初始化。这是为实例分配的内存
答案 1 :(得分:0)
是的,你可以在会话范围内拥有2个非单一类的对象。
答案 2 :(得分:0)
如果您想确保您的会话将有多个类的实例而不是更多,则由您来实现此类行为。与Singleton相同。 Java没有提供确保Singleton模式实现的机制。它可以是程序员,也可以是某个框架。因此,如果您需要预定数量的班级实例,则由您负责。这是最简单的想法:
public class MyTest {
private static List<MyTest> instances = new ArrayList<>(5);
static {
for(int i = 0; i < 5; i++) {
instances.add(new MyTest());
}
}
public static MyTest getInstance() {
return instances.get(3 /*or whatever logic to determine which one/*);
}
...
}