每个会话多个对象与单个对象

时间:2017-04-19 05:19:31

标签: java object creation

每个Singleton创建

ClassLoader个实例。与Singleton不同,ClassLoader会在遇到该类的对象创建时创建另一个对象,如果该类不是Singleton

我的问题是:每个会话的班级可以有'n'个对象吗?

3 个答案:

答案 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/*);
            }

        ...
        }