一个类多次实例化,类会被加载几次呢
时间: 2023-05-30 22:02:55 浏览: 56
一个类只会被加载一次,无论这个类被实例化了多少次。类加载器在加载一个类时,会先检查该类是否已经被加载过,如果已经加载过,就直接返回该类的Class对象,否则才会对该类进行加载。因此,即使一个类被实例化多次,它也只会被加载一次。
相关问题
试述类模板的实例化过程
类模板的实例化过程是将类模板转换为一个具体的类的过程。具体过程如下:
1. 在使用类模板时,编译器会根据模板参数的类型和数量,生成对应的类模板实例化请求。
2. 编译器会在当前作用域内查找与类模板名字相同的实体,如果找到了,就直接使用该实体,否则,就通过类模板实例化请求,根据模板参数生成新的类实体。
3. 在生成新的类实体时,编译器会将类模板中的所有类型参数替换为实际的类型参数,并将实例化后的类定义放在内存中。
4. 如果实例化的过程中发生错误,编译器会生成错误信息,提示用户如何修复错误。如果没有错误,就可以继续使用已实例化的类。
5. 在程序运行时,已实例化的类会被加载到内存中,程序可以使用该类的实例对象进行操作。
需要注意的是,类模板实例化是在编译期间完成的,而不是在运行时完成的。因此,类模板的实例化过程只会发生一次,即使在程序中多次使用该类,也只会生成一个实例化后的类。
请任意设计一个单例模式的例子,要求用饿汉式和懒汉式各实现一次。注:懒汉式单例,类在第一次被引用时,才会将自己实例化。饿汉式单例,类在被加载时就将自己实例化。同时设计一个多例模式比如3例的例子
好的,我明白了。下面是代码实现:
饿汉式单例模式实现:
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
懒汉式单例模式实现:
public class Singleton {
private static Singleton instance;
private Singleton() {}
public synchronized static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
多例模式实现:
public class MultiInstance {
public static final int INSTANCE1 = 0;
public static final int INSTANCE2 = 1;
public static final int INSTANCE3 = 2;
private static MultiInstance[] instances = new MultiInstance[3];
static {
instances[INSTANCE1] = new MultiInstance();
instances[INSTANCE2] = new MultiInstance();
instances[INSTANCE3] = new MultiInstance();
}
private MultiInstance() {}
public static MultiInstance getInstance(int which) {
return instances[which];
}
}
希望我的回答能够帮到你。如果你有其他问题,可以随时问我。