2 回答
TA贡献1993条经验 获得超5个赞
package singleton;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
//AprilCal on 2016.4.23
class Singleton//最普通的一种Singleton实现
{
private static Singleton INSTANCE=new Singleton();
private Singleton()
{
System.out.println("私有构造函数被调用");
}
public static Singleton getInstance()
{
return INSTANCE;
}
}
enum EnumSingleton2//枚举实现的Singleton
{
INSTANCE;
private EnumSingleton2()
{
System.out.println("enum 私有构造函数被调用");
}
}
public class SingletonTest
{
public static void main(String[] args)
throws ClassNotFoundException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException,
NoSuchMethodException, SecurityException, InstantiationException
{
Class <?> cls1 = Class.forName("singleton.Singleton");
Class <?> cls2 = Class.forName("singleton.EnumSingleton2");
//通过反射调用Singleton的构造函数
Constructor <?> c0=cls1.getDeclaredConstructor();
c0.setAccessible(true);
Singleton s=(Singleton)c0.newInstance();
//通过反射调用EnumSingleton的构造函数
Constructor <?> c1=cls2.getDeclaredConstructor();
c1.setAccessible(true);
EnumSingleton es=(EnumSingleton)c1.newInstance();
}
}
TA贡献1864条经验 获得超6个赞
单例模式实现方式有很多:在第一次使用的时候创建(构造函数中判断是否已经有实例存在),在类加载的时候用静态块儿创建(静态块初始化),在应用启动的时候创建。 在单线程中,基本大同小异,保证类的实例在整个应用中只有一个,都是没问题的。
- 2 回答
- 0 关注
- 602 浏览
添加回答
举报